假设我有4个类A,B,C和D,并且我想在一个类中使用所有4个,这个类正在从另一个.h文件用户实现纯虚函数。我的问题是如何将这4个类包含在一个.h中,因此.h的.cpp将允许我在类中调用这些函数。
这是我到目前为止所尝试的:
#include "User.h"
#include "A.h"
#include "B.h"
#include "C.h"
#include "D.h"
Class create : public User, public A, public B, public C, public D
{
public:
create();
virtual ~create();
bool a1();
bool b1();
bool c1();
bool d1();
int a2();
int b2();
int c2();
int d2();
};
然后当我尝试在create.cpp中调用那些函数(在A.cpp,B.ccp,C.cpp,D.cpp中声明)时,我被告知“对A :: a1()的未定义引用”。 ..等等。
这有意义吗?
答案 0 :(得分:1)
undefined reference to ...
错误不是编译错误。这是一个链接器错误。
基本上,链接器是一个程序,它将多个目标代码(即编译代码)放在一起以创建可执行文件。在您的情况下,编译器知道方法A::a1()
必须存在,与其声明(名称和参数)一致,并且不会抱怨它的使用。然而,liker找不到它的定义(基本上,它的编译实现)。
您提供的细节很少,无法解释如何正确编译和链接您的代码,但该过程应该包含每个.cpp文件的编译,其中包含您的类的实现。有关链接的一些详细信息可以在以下问题中找到:
C++ linking object's files (G++)
你可能需要这样做:
g++ source_code.cpp A.cpp B.cpp C.cpp D.cpp
或类似的东西。如果需要链接目标代码,
将每个.cpp
文件编译为.o
文件后,将.cpp
扩展名替换为.o
。