1

重複の可能性:
G++ Cpp の「未定義の参照」

私はこのヘッダーを持っています

#ifndef TEST_H_
#define TEST_H_

class TEST
{
public :
    TEST();
};


#endif /* TEST_H_ */

そしてこのヘッダー

#ifndef TESTS_H_
#define TESTS_H_
#include "TEST.h"

class TESTS : public TEST
{
public :
    TESTS();
};


#endif /* TESTS_H_ */

これらのヘッダーを次のように実装しました。

#include <iostream>
using namespace std;
#include "TEST.h"
TEST:: TEST()
{
}
int main(int argc, char **argv) {
    return 0;
}

この:

#include "TESTS.h"

TESTS :: TESTS() : TEST()
{
}


int main(int argc, char **argv) {
    return 0;
}

次のエラーが表示されます。

/tmp/cc4jN1HN.o: 関数内TESTS::TESTS()': TESTS.cpp:(.text+0xd): undefined reference toTEST::TEST()'

それはなぜです ?

私は何を間違っていますか?

4

3 に答える 3

6

これはリンカーエラーです。おそらく、必要なすべてのファイルをコンパイルしてリンクしているわけではありません。たとえば、次のようになります。

$ g++ -Wall TEST.cpp TESTS.cpp -o TEST

また、main()関数の1つを取り除く必要があります。

于 2012-12-31T08:39:28.167 に答える
1

これが1つのプログラムであると想定される場合、1つのmain機能しか持つことができません。これが2つのプログラムであると想定される場合、その中に含まれるプログラムにTESTS::TESTSは、のコンストラクターも必要ですTEST

于 2012-12-31T08:42:03.150 に答える
0

2つの.cppファイルの名前がTEST.cppとTESTS.cppであるとすると、最初のファイルをコンパイルしているだけだと思います。

g++ TESTS.cpp

ただし、次のように両方を一緒にコンパイルする必要があります。

g++ TEST.cpp TESTS.cpp

そうしないと、TESTS.cppは、コンパイル時にTEST.cppで定義されたコードを見つけることができません。

于 2012-12-31T08:40:08.323 に答える