Erro "Undefined reference to vtable" em C++: causas e solução
Olá! Estou escrevendo um pequeno projeto em C++ usando polimorfismo. Tenho uma classe base abstrata `Shape` e algumas classes derivadas: `Circle`, `Rectangle`. Na classe base, declarei uma função virtual `area()`. Quando tento compilar o projeto com g++, o compilador retorna o erro:
```
undefined reference to 'vtable for Shape'
```
Aqui está o código simplificado:
shape.h:
```cpp
#ifndef SHAPE_H
#define SHAPE_H
class Shape {
public:
virtual double area() = 0; // função virtual pura
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) {}
// Esqueci de implementar area()!
```
main.cpp:
```cpp
#include "circle.h"
int main() {
Circle c(5.0);
return 0;
}
```
Estou compilando assim: `g++ main.cpp cir