我对C ++很陌生,虽然已经定义并包含了构造函数,但我仍然会给构造函数带来未定义的引用错误。我知道这是一个非常常见的错误,并且有很多问题,但是每一个看起来都与我的有点不同,我无法解决我的问题。
基本上我希望B类有一个A类的实例变量,它是一个带有“真实”子类ASub的虚拟类。此外,A类文件位于〜/ level1 /,B类文件位于〜/ level1 / level2 /。
我一直收到以下错误:
error: undefined reference to 'mynamespace::A::A()'
error: undefined reference to 'mynamespace::A::~A()'
a.h看起来像这样:
#ifndef A_H__
#define A_H__
namespace mynamespace {
class A {
public:
A();
virtual ~A();
};
class ASub : public A {
public:
ASub();
~ASub();
};
} // namespace mynamespace
#endif // A_H__
a.cc看起来像这样:
#include "level1/a.h"
namespace mynamespace {
A::A() {}
A::~A() {}
ASub::ASub() {}
ASub::~ASub() {}
}; // namespace mynamespace
b.h看起来像这样:
#ifndef B_H__
#define B_H__
#include "level1/a.h"
namespace mynamespace {
class B {
public:
B();
~B();
void SetA(A a);
private:
A a_;
};
} // namespace mynamespace
#endif // B_H__
最后b.cc看起来像这样:
#include "level1/level2/b.h"
#include "level1/a.h"
namespace mynamespace {
B::B() {}
B::~B() {}
void B::SetA(A a) {
a_ = a;
}
}; // namespace mynamespace
答案 0 :(得分:1)
在b.h中包含a.h,否则你将无法编译。链接器错误可能来自之前的构建,我怀疑你需要做一个干净的构建。