获取未定义的引用错误

A D*_*A D 1 c++

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

$~/display/triangleDisplayable.cc:4: undefined reference to `Displayable::Displayable()'
Run Code Online (Sandbox Code Playgroud)

我试图抽象一个类,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;

    };
Run Code Online (Sandbox Code Playgroud)

和"triangleDisplayable.h"

    #include "Displayable.h"

    class triangleDisplayable : public Displayable 
    {

    public:
        triangleDisplayable();
        int getSizeOfArrays();

    private:
        void init();
        int getSizeOfPointsArray();
        int getSizeOfNormalsArray();

    };
Run Code Online (Sandbox Code Playgroud)

然后我有"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;
    }
Run Code Online (Sandbox Code Playgroud)

和"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;
    }
Run Code Online (Sandbox Code Playgroud)

我一直在尝试按照各种教程学习如何在C++中进行抽象,但我还没有真正找到任何有用的解决方案.我相信我所有#include的都是正确的,我读到的是一个常见的问题.错误消息似乎表明问题是该行

    triangleDisplayable::triangleDisplayable() : Displayable() {
    }
Run Code Online (Sandbox Code Playgroud)

我试图编译没有: Displayable()但我得到相同的错误.我的头文件中的语法可能有问题吗?

Cat*_*lus 6

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