viernes, agosto 14, 2009

gcc: undefined reference to vtable for



Estuve obteniendo el siguiente error:
Networking.cpp:193: undefined reference to `vtable for Client'

Es mensaje de error es bastante oscuro, pero la solución es muy simple: en caso de usar clases con funciones virtual, gcc exige que éstas funciones sean implementadas en un archivo .cpp:

Si tenemos el siguiente Client.h:
    class Client {
    public:
        Client() {
            // ...
        }
        virtual ~Client() {
            // ...
        }
        virtual void foo() {
            // ...
        }
    }


Tendremos que dividirlo en dos. En Client.h habrá que tener:
    class Client {
    public:
        Client() {
            // ...
        }
        virtual ~Client();
        virtual void foo();
    }


Y en Client.cpp:
Client::~Client() {
    // ...
}
void Client::foo() {
    // ...
}


Para más información lerr la FAQ de gcc sobre vtables.

2 comentarios:

Tin Man dijo...

Gracias

Albert Crespi dijo...

Gracias Alejandro, justo el error que tenia, por no implementar el destructor...