获取未定义的引用错误

时间:2012-01-05 10:40:29

标签: c++

我希望有人可以指出我正确的方向,找出我收到以下错误的原因:

$~/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()的情况下进行编译,但是我得到了同样的错误。我的头文件中的语法可能有问题吗?

1 个答案:

答案 0 :(得分:6)

不,错误发生在工具调用中。您需要将两个源文件链接在一起(例如g++ -o foo a.cc b.cc)。并删除其中一个main函数,因为您不能有两个不同的函数。