0

我正在尝试运行一个简单的位操作练习来查找 Visual Studio 2012 中无符号数的高位位置,但我不断收到以下错误:

错误 LNK2019:未解析的外部符号 _highBitPostion 在函数 _main C:\Users\Dalton Pablo\Desktop\School\C539 projects\homework 4 C539\bitfiddling hw4.obj 中引用

错误 LNK1120:1 未解决的外部 C:\Users\Dalton Pablo\Desktop\School\C539 projects\homework 4 C539\Debug\homework 4 C539.exe 1

我过去曾遇到过这些错误,但最后总是在实验室中运行我的程序,因为他们的机器不会给我这些问题。我在这个网站上搜索了其他类似的问题来解决这个问题,但收效甚微。

我已经尝试过:

属性 > 配置道具。> 链接器 > 系统 >

然后将子系统更改为Console

我已将我的代码更新为 TooTones 建议,不幸的是它没有解决问题。如果您仍然看到我的代码导致这些错误,请告诉我。

这是我的上下文代码:

#include <stdio.h>
#include <stdlib.h>


unsigned highBitPosition (unsigned n);
unsigned long long highBitPosition64 (unsigned long long nn);

int main(void){
//unsigned n = 0x0BABE000U;

  printf("High Bit Postion 32: ");
  printf("%u", highBitPosition(0x0BABE000U));

}

unsigned highBitPosition (unsigned n){
unsigned pos;
  for ( pos = 31; pos > 0; pos--){

    if(((n >> pos) & 1U) == 1)

    return pos;
}

 return 0; }

unsigned long long highBitPosition64 (unsigned long long nn){

unsigned hiOrder, lowOrder, bitPos;

if (nn == 0) return 0;

hiOrder = nn >>32;
lowOrder = nn & 0x00000000FFFFFFFFULL;

    if( highBitPosition(hiOrder) != 0){
        bitPos = highBitPosition(hiOrder) + 32;
    }else
        bitPos = highBitPosition(lowOrder);

return bitPos;
}
4

1 回答 1

1

你的前向声明

unsigned highBitPostion (unsigned n);

不符合你的定义

unsigned highBitPosition (unsigned n){

一个字符一个字符 的声明需要与定义相匹配。所以你不能在小写/大写,拼写错误等方面有区别。这里你在声明中有拼写错误。

所以链接器正在寻找highBitPostion它找不到的定义,所以它说它highBitPostion丢失了。(它不够聪明,无法确定您定义的函数,highBitPosition它应该使用的函数!)

于 2013-04-27T20:59:37.173 回答