我希望有人能指出我在正确的方向要弄清楚为什么我收到以下错误:获得一个未定义的引用错误
$~/display/triangleDisplayable.cc:4: undefined reference to `Displayable::Displayable()'
我试图抽象类Displayable
,并有一类triangleDisplayable
实现其方法。两个头文件我是 “Displayable.h”:
class Displayable {
public:
Displayable();
virtual int getSizeOfArrays() = 0;
void display(int size);
private:
virtual void init() = 0;
virtual int getSizeOfPointsArray() = 0;
virtual int getSizeOfNormalsArray() = 0;
};
和 “triangleDisplayable.h”
#include "Displayable.h"
class triangleDisplayable : public Displayable
{
public:
triangleDisplayable();
int getSizeOfArrays();
private:
void init();
int getSizeOfPointsArray();
int getSizeOfNormalsArray();
};
然后我有 “Displayable.cc”
#include <iostream>
#include "Displayable.h"
Displayable::Displayable() {
std::cout << "testing Displayable constructor" << std::endl;
}
void Displayable:display(int size) {
}
int main() {
return 0;
}
和“triangleDisplayable.cc”
#include <iostream>
#include "triangleDisplayable.h"
triangleDisplayable::triangleDisplayable() : Displayable() {
}
int triangleDisplayable::getSizeOfArrays() {
return 0;
}
void triangleDisplayable::init() {
}
int triangleDisplayable::getSizeOfPointsArray() {
return 0;
}
int triangleDisplayable::getSizeOfNormalsArray() {
return 0;
}
int main() {
return 0;
}
我一直在尝试跟随各种教程来学习如何在C++中进行抽象,但我还没有真正能够找到任何有用的解决方案。我相信我所有的#include
都是正确的,我读到的是一个常见问题。该错误消息似乎表明,问题是我已经试过没有: Displayable()
编译行
triangleDisplayable::triangleDisplayable() : Displayable() {
}
,但我得到了同样的错误。我的头文件中的语法可能有问题吗?
你编译过Displayable.cc并链接到目标文件吗? – PlasmaHH 2012-01-05 10:43:10
尝试定义构造函数..即代替Displayable();尝试Displayable(){};在Displayable.h文件中。这将在您所有的子类构造函数中调用 – Pramod 2012-01-05 10:48:04
我没有将两个源文件链接在一起。谢谢您的帮助! – 2012-01-05 10:52:32