いつもお世話になります。
環境WinXP VC++6.0
静的ライブラリ(C++)で以下のようなクラスを定義しました。
Test2()の実装はTestClass.cppで行っています。
class TestClass
{
public:
int Test1(){return 4;}
int Test2();
};
EXE側(C++)で以下のようにしたところコンパイルエラーになりました。
int n;
TestClass e;
n = e.Test1();
n = e.Test2();
エラーメッセージ:
LNK2001: 外部シンボル "public: int __thiscall TestClass::Test2(void) (?
Test2@TestClass@@QAEHXZ) は未解決です
Debug/----.exe : fatal error LNK1120: 外部参照 1 が未解決です。
Test1は問題なしでTest2だけが問題のようです。
どうすれば解決できますでしょうか。
よろしくお願いいたします。
void TestClass::Test2() を実装する。
ありがとうございます。
Test2はTestClass.cppファイルで以下のように実装しています。
int TestClass::Test2()
{
return 5;
}
ヘッダファイルで実装したものはEXEで使えるのですが、
cppで実装したものは使えないという状況です。
EXE側に依存関係をつける。
D:\work>cl -c TestClass.cpp
D:\work>lib /OUT:TestClass.lib TestClass.obj
D:\work>cl -EHsc main.cpp TestClass.lib
D:\work>main
9
…どってことねぇですが。
あ、
----- main.cpp -----
#include <iostream>
#include TestClass.h
int main() {
TestClass e;
int n = e.Test1();
n += e.Test2();
std::cout << n << std::endl;
return 0;
}
です。
単に、EXE側に静的ライブラリをリンクしていないのでは?
ヘッダファイルのincludeだけでは、リンクしたことになりません。
ありがとうございました。
できました。
プロジェクト→依存関係→TestClassをチェック
なんだかなー ^^;
LNK2001:
ってコンパイルエラーじゃなくて、リンクのエラーですもんね。。