未解決的外部符號!

2021-07-14 10:37:15 字數 734 閱讀 3448

遺忘功能體

許多新的程式設計師的乙個問題是:如果我們向前宣告乙個函式,但不定義它會發生什麼?

考慮下面的程式:

#include int add(int x, int y); // forward declaration of add() using function prototype

int main()

在這個程式中,我們提出宣告(),我們稱之為(),但我們沒有任何定義()。當我們嘗試編譯這個程式時,視覺工作室2005快車產生如下資訊:

編譯…add.cpp

鏈結…add.obj:錯誤lnk2001:未解決的外部符號」(int,int,int __cdecl新增)」(?新增@ @ yahhh @ z)

add.exe:致命錯誤lnk1120:1未解決的疑團

你可以看到,程式編譯好的,但是它沒有在鏈結階段(int,int,int加)沒有定義。

其他型別的前向宣告

前向宣告是最常用的函式。然而,前向宣告也適用於c++的其他識別符號,如變數和使用者自定義型別。其他型別的識別符號(例如,使用者定義型別)有不同的前向宣告的語法。

我們將討論更多關於如何在未來的經驗中宣告其他型別的識別符號。

宣告和定義

在c++中,你經常會聽到「宣言」和「定義」。他們的意思是什麼?你現在有足夠的乙個框架,以了解兩者之間的差異。

定義實際實現或例項化(導致記憶體被分配的識別符號)。下面是一些定義的例子:

無法解析的外部符號

在使用vs2008除錯程式的過程中,經常會出現無法解析的外部符號問題,可能的原因有很多種,下面這些是我一年來積累的經驗.僅供參考.考慮可能的原因 0 出現無法解析可能是因為lib檔案不正確,比如64位的編譯配置,結果使用的是32位的lib包.1 只寫了類宣告,但還沒有寫實現類,造成呼叫時無法解析 2...

無法解析的外部符號

在使用vs2008除錯程式的過程中,經常會出現無法解析的外部符號問題,可能的原因有很多種,下面這些是我一年來積累的經驗.僅供參考.考慮可能的原因 0 出現無法解析可能是因為lib檔案不正確,比如64位的編譯配置,結果使用的是32位的lib包.1 只寫了類宣告,但還沒有寫實現類,造成呼叫時無法解析 2...

無法解析的外部符號

在類模板類外實現.h和.cpp分來寫的時候 pragma once template class t class person include stdafx.h include person.h template class t person person t age template class ...