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
的定义中删除括号。