0

ヘッダーファイル:

class FakeMas
{
   FakeMas();
   ~FakeMas();
}

CPPファイル:

FakeMas::FakeMas(){........}
FakeMas::~FakeMas(){}

FakeMasをテストするためにcppファイルを作成します。

class FakeMasTest{
    void test() 
    {
        FakeMas fakemas;            
        fakemas.start();
    }
}

「zinc.testwebserver」と呼ばれるプロジェクトのクラス

私がそれを構築する場合、それは言う

FakeMasTest.cpp:29: undefined reference to `zinc::testwebserver::FakeMas::FakeMas()'"

テストを次のように変更した場合:

FakeMas::FakeMas * fakemas = new FakeMas::FakeMas();

それは言う

error: ‘fakemas’ was not declared in this scope

テストを次のように変更した場合:

FakeMas * fakemas = new FakeMas();

それは言う

undefined reference to `zinc::testwebserver::FakeMas::FakeMas()'

私は本当にそれを行う方法を知りません...

何かアイデアがありますか?

ありがとう

4

2 に答える 2

1

これはリンク エラーのように聞こえます。 のオブジェクト コードがFakeMas.cppのオブジェクト コードとリンクされていません。FakeMasTest.cpp

(これらはFakeMas.oFakeMasTest.o一部のプラットフォームでは.obj、他のプラットフォームではそうです-あなたはあなたのものを指定していません)。

したがって、コードはコンパイルされますが、実行可能ファイルにはなりません。解決策はビルド システム (これも指定していません) によって異なりますが、基本的には、実行可能ファイルが両方のオブジェクト ファイルに依存し、それらを含む必要があることを伝えることです。


あなたが得た無関係なエラーは、これが有効でないためです:

FakeMas::FakeMas * fakemas = new FakeMas::FakeMas();

そのはず:

FakeMas * fakemas = new FakeMas();

(その後、同じリンク エラーに戻ります)。


Makefile から:

CppUnit_Tests = fakemastest
TESTS = $(CppUnit_Tests)
testdir = $(prefix)/tests/@PACKAGE@/test
test_PROGRAMS = $(CppUnit_Tests)

fakemastest_SOURCES = FakeMasTest.cpp

実行可能ファイルがのみfakemastest依存することを Make に伝えています。最後の行を変更して、それについても教えてください。FakeMasTest.cppFakeMas.cpp

fakemastest_SOURCES = FakeMasTest.cpp FakeMas.cpp

(これは、表示されていないビルド ルールに関する特定の仮定を行っていますが、開始するのには賢明な場所です)。

于 2013-01-09T16:53:15.927 に答える
0

コンパイラが の宣言を見つけられないようですFakeMas。追加しなかったか

#include "FakeMas.h"

または、正しい名前空間を指定する必要があります:

using namespace namespace_with_FakeMas;

コンパイラ メッセージは、コンパイラが名前空間でクラス宣言を探していることを示していますzinc::testwebserver。これは、FakeMas宣言された名前空間と同じではないようです。

于 2013-01-09T16:48:54.987 に答える