Avatar ·

C++ 中 "Undefined reference to vtable" 错误:原因与解决方案

你好!我正在用 C++ 写一个小项目,使用了多态。我有一个抽象基类 `Shape` 和几个派生类:`Circle`、`Rectangle`。在基类中声明了一个虚函数 `area()`。当我尝试用 g++ 编译项目时,编译器报错: ``` undefined reference to 'vtable for Shape' ``` 以下是简化代码: shape.h: ```cpp #ifndef SHAPE_H #define SHAPE_H class Shape { public: virtual double area() = 0; // 纯虚函数 virtual ~Shape() {} }; #endif ``` circle.h: ```cpp #include "shape.h" class Circle : public Shape { public: Circle(double r); double area() override; private: double radius; }; ``` circle.cpp: ```cpp #include "circle.h" Circle::Circle(double r) : radius(r) {} // 忘记实现 area() 了! ``` main.cpp: ```cpp #include "circle.h" int main() { Circle c(5.0); return 0; } ``` 我这样编译:`g++ main.cpp cir