-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