Salve ragazzi, ho un problemino. Studiando il C++ su un libro ho visto che le funzioni virtuali, oltre a permettere il polimorfismo, danno la possibilità di dichiarare nella classe base una funzione però di definirla solo nelle classi derivate. Per esempio:
codice:
#include <iostream>
using namespace std;
class base
{
public:
virtual void prova(void);
};
class derivata : public base
{
public:
void prova(void){ cout << "Ciao" << endl; }
};
int main()
{
base* temp= new derivata;
temp->prova();
return 0;
}
Insomma secondo il libro è giusto e neanche il compilatore si oppone. Il problema è dato dal linker ld (sono su ubuntu):
codice:
alessio@linux:~/Desktop$ g++ Sorgente\ C++.cpp
/tmp/ccU3vyVz.o: In function `base::base()':
Sorgente C++.cpp:(.text._ZN4baseC2Ev[base::base()]+0x8): undefined reference to `vtable for base'
/tmp/ccU3vyVz.o:(.rodata._ZTI8derivata[typeinfo for derivata]+0x8): undefined reference to `typeinfo for base'
collect2: ld returned 1 exit status
Qualcuno potrebbe illuminarmi? Vi preeeeeeeeeeego!! :)