-1
我很新的C++和我不断收到未定义的引用错误的构造函数,虽然他们被定义和包括。我知道这是一个非常常见的错误,关于这个问题还有很多问题,但每一个都与我的看法有些不同,我无法解决我的问题。未定义的引用构造函数的虚拟类在C + +
基本上我想要一个类B有一个类A的实例变量,这是一个虚拟类与“真正”的子类ASub。此外,类A的文件在〜/ level1 /中,而类B的文件在〜/ level1/level2 /中。
我不断收到以下错误:
error: undefined reference to 'mynamespace::A::A()'
error: undefined reference to 'mynamespace::A::~A()'
啊看起来是这样的:
#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
BH看起来是这样的:
#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
它不应该编译:处理b.h时,不声明'A'。您显示的代码不是您实际构建的代码。 – 2014-09-03 22:53:36
你如何链接你的对象文件? (我也怀疑''b.h'可以编译,因为'A'的声明丢失了。)另外,'A_H__'是一个保留的标识符,因为它有一个双下划线。不要使用它。 – 2014-09-03 22:55:33
向我们展示您用于构建项目的命令行。 – randomusername 2014-09-03 22:55:57