私はこれを静的変数で何時間も解決しようとしてきunresolved external symbol
ましたが、私は頭が痛いです。私は Visual Studio 2010 を使用しています。状況の簡単な概要を次に示します。
問題のプロジェクト:
-ProjA (outputs a .dll and .lib)
-ProjB (outputs a .exe)
ProjA には、次の 2 つのファイルがあります。
//foo.h
#pragma once
class SUP
{
public:
static int staticint;
};
と
//foo.cpp
#include "foo.h"
int SUP::staticint = 10;
ProjA.lib への ProjB リンク
//main.cpp
#include "{Full_Path}foo.h"
int main(){
std::cout << SUP::staticint << std:: endl;
}
現在、main.cpp は問題なくコンパイルされていますが、プロジェクトをビルドしようとすると、次のエラーが発生します。
main.obj : error LNK2001: unresolved external symbol "public: static int SUP::staticint" (?staticint@SUP@@2HA)
ProjB のオプションを正しく設定したことはほぼ 100% 確信しています。「追加の依存関係」の下にはすべて「ProjA.lib」があり、「追加のライブラリ ディレクトリ」の下には ProjA.lib ファイルが生成されるディレクトリへのパスがあります。
ProjA で .map ファイルを出力したこともあり、マップには次のようなものがあります。
0003:00004458 ?staticint@SUP@@2HA 10049458 foo.obj
だから私はそれstaticint
が正しく定義されていることを意味すると推測しています。
何がうまくいかない可能性がありますか?明らかに、私は何か間違ったことをしていますが、何が間違っているのかわかりません。ProjB が正しい .lib ファイルにリンクしていることを確認しました。インクルードディレクトリが適切であることを確認しました。static 変数の定義が適切であることを確認しました。必要に応じて他の情報を提供します。