LNK 2001:unresolved external symbol、不確定な外部記号.要約
8576 ワード
このようなエラーは、コンパイラが指定したシンボル(関数)定義を見つけられなかったことです.
このエラーメッセージは、すべてのライブラリおよびターゲットファイルに参照される関数、変数、またはラベルが見つからない場合に発生します.接続時に表示される可能性は2つあります.
一、声明に定義が見つからない
関数宣言ドメイン関数定義ヘッダが一致しないか、自分で書いた関数が見つからないのは宣言だけで、定義はありません.
例:1.パラメータが一致しない(参照を含む)
2.宣言したが定義(実装)されず使用された.(同じように.cまたは.cppファイルをプロジェクトに追加していない場合に発生する可能性がある)(使用したが宣言されていない場合(実装の有無に関係なく)、includeヘッダファイルがないなどの「undefined xxx」のエラーが報告される......)
3.C++エラーunresolved external symbol_WinMain@16(1)project->setting->c/c++に入り、category(最初の行)でpreprocessorを選択し、processor definitionsで_を削除するWINDOWS,追加_CONSOLE(2)プロジェクト->setting->Linkに入り、プロジェクト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ライブラリファイルに接続されていません.コマンドをコンパイルしたり、VCのlibファイルパスを設定したりできます.
例:
htonsはWindowsでヘッダファイル+libが必要です
三、static静的変数コンパイルエラー
問題は、静的データクラスのメンバーを初期化していないため、外部変数を解析できないエラーが発生することです.なぜなら、コンパイラは、静的クラスのデータ・メンバーに対して、コンパイル時に静的メモリ領域に静的データ型を格納するためのメモリを割り当てる変数であり、クラス内のオブジェクトに関係なく、オブジェクトの影響を受けないからです.したがって、静的データ型の変数を初期化しないと、コンパイラはメモリを割り当てないため、外部変数が解析できないエラーが発生します.この問題を修正する方法は簡単で、あるcppの関数の外部でこの静的データメンバーを初期化するだけで例を挙げることができます:(その注釈文をキャンセルするとbugが修復されます)test.h
test.cpp
参照先:https://zhidao.baidu.com/question/94235444.html https://blog.csdn.net/qq_23557345/article/details/81354344
このエラーメッセージは、すべてのライブラリおよびターゲットファイルに参照される関数、変数、またはラベルが見つからない場合に発生します.接続時に表示される可能性は2つあります.
一、声明に定義が見つからない
関数宣言ドメイン関数定義ヘッダが一致しないか、自分で書いた関数が見つからないのは宣言だけで、定義はありません.
例:1.パラメータが一致しない(参照を含む)
#include
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ファイルをプロジェクトに追加していない場合に発生する可能性がある)(使用したが宣言されていない場合(実装の有無に関係なく)、includeヘッダファイルがないなどの「undefined xxx」のエラーが報告される......)
#include
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)プロジェクト->setting->Linkに入り、プロジェクト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ライブラリファイルに接続されていません.コマンドをコンパイルしたり、VCのlibファイルパスを設定したりできます.
例:
htonsはWindowsでヘッダファイル+libが必要です
#include
using namespace std;
#include
#pragma comment(lib, "wsock32.lib")// htons “ ”
int main()
{
u_short a = 0x1234;
u_short b = htons(a);
cout << b << endl;
return 0;
}
三、static静的変数コンパイルエラー
問題は、静的データクラスのメンバーを初期化していないため、外部変数を解析できないエラーが発生することです.なぜなら、コンパイラは、静的クラスのデータ・メンバーに対して、コンパイル時に静的メモリ領域に静的データ型を格納するためのメモリを割り当てる変数であり、クラス内のオブジェクトに関係なく、オブジェクトの影響を受けないからです.したがって、静的データ型の変数を初期化しないと、コンパイラはメモリを割り当てないため、外部変数が解析できないエラーが発生します.この問題を修正する方法は簡単で、あるcppの関数の外部でこの静的データメンバーを初期化するだけで例を挙げることができます:(その注釈文をキャンセルするとbugが修復されます)test.h
class test
{
public:
test() {}
~test() {}
static int state;
void func();
private:
};
test.cpp
#include
#include "test.h"
using namespace std;
//int test::state=0;// ~
int main()
{
test a;//
a.func();
return 0;
}
void test::func()
{
//state = 15;//
cout << "state:" << state <<endl;
}
参照先:https://zhidao.baidu.com/question/94235444.html https://blog.csdn.net/qq_23557345/article/details/81354344