未定义的C ++中虚拟类构造函数的引用

时间:2014-09-03 22:50:34

标签: c++

我对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

1 个答案:

答案 0 :(得分:1)

在b.h中包含a.h,否则你将无法编译。链接器错误可能来自之前的构建,我怀疑你需要做一个干净的构建。