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