2013-04-27 255 views
0

我想運行一個簡單的位操作練習,以找到在Visual Studio 2012的無符號數的高位位置,我不斷收到這些錯誤:錯誤LNK2019和LNK1120錯誤

錯誤LNK2019:無法解析的外部符號_highBitPostion在函數_mainç引用 :\用戶\道爾頓巴勃羅\桌面\學校\ C539 項目\功課4 C539 \ bitfiddling hw4.obj

錯誤LNK1120:1周無法解析的外部C:\用戶\道爾頓 巴勃羅\桌面\學校\ C539項目\作業4 C539 \調試\作業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; 
} 
+0

我剛剛複製並將修改後的代碼粘貼到vs2012,它編譯和鏈接罰款給我。你可以嘗試做一個乾淨或重建(或像我一樣從新的代碼開始)。你的代碼中不再有'highBitPostion',所以我不知道你仍然有這個錯誤。 PS如果你評論某人回答的答案,他們會收到通知;否則如果你只是更新你的問題,他們可能不知道。 – TooTone 2013-04-29 11:30:27

+0

我也試過這個,它不能解決這個問題。真的很奇怪和令人沮喪。我認爲它與某個編譯器設置有關,但我真的知道從哪裏開始。我會看看我的教授能否幫助我看看它。謝謝您的幫助。下次我會記住這一點。 – 2013-04-29 13:26:15

+0

你是如何解決這個問題的? – TooTone 2013-05-05 14:44:28

回答

1

你前進聲明

unsigned highBitPostion (unsigned n); 

不符合您的定義

unsigned highBitPosition (unsigned n){ 

標記F或字符該聲明需要與定義相匹配。所以你不能在小寫/大寫,拼寫錯誤等方面有所不同。這裏你在聲明中有一個拼寫錯誤。

因此,鏈接器正在尋找highBitPostion的定義,它無法找到,所以它說缺少highBitPostion。 (它是不夠聰明,你確定定義的功能,highBitPosition,它應該使用的一個!)