关于多态性和常量的错误

Error regarding polymorphism and const

本文关键字:错误 常量 多态性      更新时间:2023-10-16
class AdjacencyList : public Graph{
    private:
        std::vector<Edge> edges;
    public:
        AdjacencyList();
        void add_edge(const Edge& e){
            edges.push_back(e);
        }
        void print(){
            for(int i = 0;i<edges.size() ; i++){
                std::cout << "(" << edges[i]  << ")";
            }
        }
};

遇到的问题是它给了我以下错误:

/tmp/ccqBzTGI.o: In function `main':
test.cpp:(.text+0x3d): undefined reference to `AdjacencyList::AdjacencyList()'
/tmp/ccqBzTGI.o: In function `Graph::Graph()':
test.cpp:(.text._ZN5GraphC2Ev[_ZN5GraphC5Ev]+0xf): undefined reference to `vtable for Graph'
/tmp/ccqBzTGI.o:(.rodata._ZTI15AdjacencyMatrix[typeinfo for AdjacencyMatrix]+0x10): undefined reference to `typeinfo for Graph'
/tmp/ccqBzTGI.o:(.rodata._ZTI13AdjacencyList[typeinfo for AdjacencyList]+0x10): undefined reference to `typeinfo for Graph'
collect2: ld returned 1 exit status

我什至不确定如何处理这个问题。

编辑:我是个傻瓜,忘了定义我写的构造函数。

class AdjacencyList : public Graph{
private:
    std::vector<Edge> edges;
public:
    AdjacencyList();
    void add_edge(const Edge& e){
        int i,j;
        edges.push_back(e);
    }
    void print(){
        for(int i = 0;i<edges.size() ; i++){
            std::cout << "(" << edges[i]  << ")";
        }
    }

您已经声明了默认构造函数 AdjacencyList((,但尚未为其提供主体定义。

查找缺少的构造函数和缺少的成员函数,就像错误消息所说的那样。在这种情况下,错误消息可能不是 100% 清楚的,但是,相信我,与典型的C++错误消息相比,这些错误消息在清晰度方面比平均水平要好。始终尝试找出并理解编译器的错误消息。随着时间和练习,您应该不会花很长时间才能理解其中的大多数。

您声明了

AdjacencyList();

构造 函数。你显然没有在任何地方定义它。

您声明了整个类:

class Graph{
    public:
        virtual void add_edge(const Edge& e);
        virtual void print();
        friend std::ostream& operator<<(std::ostream& os, const Edge& obj);
};

显然,您没有定义它的任何方法。如果这应该是一个抽象接口类,则应将这些方法定义为纯虚拟方法。