C++面向对象编程编译错误汇总

发布时间 2024-01-10 22:01:37作者: FBshark

1. undefined reference to `vtable for Subject 肿么办?

C++提示编译时提示

undefined reference to vtable for 。。。

这是因为 类 在头文件中声明了 父类 的虚函数,但是没有实现虚函数。

总之,就是类里边的函数仅仅声明了,但是没有实现。(C++是不允许这样的(纯虚函数除外))

解决办法:

  • 在类的源文件中实现 虚函数 功能,或者定义为纯虚函数。

 

2. undefined reference to 'WinMain@16' 的四种情况

undefined reference to ‘WinMain@16’ 意思为提示找不到 WinMain 函数,WinMain是windows程序的入口函数,有几种可能:

总之就是找不到 main()函数的意思。

若本来想把没有main()函数的文件编译成静态库或者.o,以供以后链接的时候再使用,就需要指定 gcc 参数为 -c,意思是只编译不链接。

这里有一个奇怪而且有趣的地方,举个例子——我的Observer.cpp 文件中调用了 Subject.cpp 的函数。

但是只编译的情况下,只要有相应的函数声明就行(不需要实现),编译器认为函数在别的文件实现了,认为可以放心食用。(如果不理解,可以参考我的文章《【Cpp 基础】分离式编译模式》)

然后在链接的时候,将调用了的 Subject.cpp 的函数链接起来。