对基构造函数的未定义引用

undefined reference to base constructor

本文关键字:未定义 引用 构造函数      更新时间:2023-10-16

可能重复:
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 to TEST::TEST(('中

为什么?

我做错了什么?

这是一个链接器错误。您可能没有编译和链接所有必需的文件。它应该是例如:

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

您还需要去掉其中一个main((函数。

如果这应该是一个程序,那么它只能有一个main函数。如果假设这是两个程序,那么其中包含TESTS::TESTS的程序也需要TEST的构造函数。

假设你的两个.cpp文件名为TEST.cpp和TESTS.cpp,我猜你只是在编译第一个,比如使用

g++ TESTS.cpp

但是您需要将它们一起编译,例如使用

g++ TEST.cpp TESTS.cpp

否则,TESTS.cpp在编译时将无法找到TEST.cpp中定义的代码。