我希望有人可以指出我正确的方向,找出我收到以下错误的原因:
$~/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
都是正确的,我读到这是一个常见的问题。错误消息似乎表明问题是行
triangleDisplayable::triangleDisplayable() : Displayable() {
}
我试图在没有: Displayable()
的情况下进行编译,但是我得到了同样的错误。我的头文件中的语法可能有问题吗?
答案 0 :(得分:6)
不,错误发生在工具调用中。您需要将两个源文件链接在一起(例如g++ -o foo a.cc b.cc
)。并删除其中一个main
函数,因为您不能有两个不同的函数。