LNK2001:unresolved external symbol,不確定的外部符號。彙總

這類錯誤是編譯器找不到指定的符號(函數)定義【聲明瞭,用了,卻沒定義(沒有找到這個函數的實現)】

如果連接程序不能在所有的庫和目標文件內找到所引用的函數、變量或標籤,將產生此錯誤消息。
它是在連接的時候出現的,有兩種可能:

一、聲明找不到定義

函數聲明域函數定義頭不一致,或者找不到
自己寫的這個函數只有聲明,沒有定義,

舉例:
1.參數對不上(包括引用)

#include <iostream>
using namespace std;
void f(int);//聲明瞭,但是參數類型對不上
//void f(int &);//此處爲對應上的參數

int main()
{
	int num = 100;
	f(num);
	return 0;
}

void f(int &a)
{	cout << a << endl;}

2.聲明瞭但沒定義(實現),而且使用了。
(同樣可能出現在 沒有把某.c或者.cpp文件加入工程)
(如果用了但沒聲明(實現與否無關),則會報“undefined xxx”的錯誤,比如沒include頭文件……)

#include <iostream>
using namespace std;
void f();//聲明瞭,但是定義被註釋掉了

int main()
{
	f();
	return 0;
}
//此處是定義
//void f()
//{	cout << "123" << endl;}

3.C++錯誤unresolved external symbol _WinMain@16
(1)進入project->setting->c/c++, 在category(第一行)中選擇preprocessor,在processor definitions中刪除_WINDOWS, 添加_CONSOLE
(2)進入project->setting->Link, 在Project options中將/subsystem:windows.改爲/subsystem:console
(3)保存設置,Rebuild All.
(來自:https://zhidao.baidu.com/question/43578597.html)

二、沒有連接報錯函數的lib庫文件

1.) lib 與dll不符。
2.) h文件與lib、dll不符。

3.) 沒有加入相應的lib.
報錯的這個函數是動態連接庫導出的函數,而你沒有連接它的lib庫文件。
可以用“#pragma comment(lib, “那個庫.lib”)”編譯命令或設置VC的lib文件路徑。

舉例:

htons在Windows需要 頭文件+某lib

#include <iostream>
using namespace std;
#include<WinSock2.h>
#pragma comment(lib, "wsock32.lib")//注掉後htons函數報“無法解析的外部符號”錯

int main()
{
	u_short a = 0x1234;
	u_short b = htons(a);
	cout << b << endl;
	return 0;
}

參考:https://zhidao.baidu.com/question/94235444.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章