class OGraph {
public:
    OGraph() { }
    virtual ~OGraph();

    virtual bool is_directed()=0;
};

class OUGraph : public OGraph {
public:
    OUGraph() {  }
    bool is_directed() { return false; }
    ~OUGraph() {}
};


但是当我这样做时

OUGraph myGraph();
cout << myGraph.is_directed();


我收到以下错误:


  未定义符号:“ typeinfo for
  OGraph”,引用自:
        main.o中的OUGraph的typeinfo,“ OGraph的vtable”,引用自:
        在main.o中的OGraph :: OGraph()mkdir -p dist / Debug / GNU-MacOSX“ OGraph ::〜OGraph()”,引用自:
  g ++ -o
  dist / Debug / GNU-MacOSX / opengraph
  编译/调试/GNU-MacOSX/OGraph.o
  编译/调试/GNU-MacOSX/main.o
        OUGraph :: ~~ main.o中的OUGraph()
        在main.o中的OUGraph ::〜OUGraph()ld:找不到符号collect2:ld
  返回1个退出状态make [2]:*
  [dist / Debug / GNU-MacOSX / opengraph]
  错误1 make [1]:[。build-conf]
  错误2使:** [.build-impl]错误
  2
  
  生成失败(退出值2,总计
  时间:568ms)

最佳答案

您没有为virtual ~OGraph();提供实施。提供实现,或者使用= 0;将其指定为纯虚拟的,或者只是摆脱它。

编译器希望将类的类型信息附加到其第一个虚拟方法的实现中。您的第一个虚拟方法是未定义的,因此永远不会生成实现,并且会出现相关的链接错误。

此外,正如大家所说,您应该从myGraph的定义中删除括号。

07-24 09:45