Sto riscontrando qualche problema nell'implementazione di funzioni virtuali pure ereditate da una classe astratta, quando le classi in questione sono suddivise in *.h
e *.cpp files
. Il compilatore (g++
) mi dice che la classe derivata non può essere istanziata a causa dell'esistenza di funzioni pure.File di intestazione e intestazione di pura funzione virtuale di C++
/** interface.h**/
namespace ns
{
class Interface {
public:
virtual void method()=0;
}
}
/** interface.cpp**/
namespace ns
{
//Interface::method()() //not implemented here
}
/** derived.h **/
namespace ns
{
class Derived : public Interface {
//note - see below
}
}
/** derived.cpp **/
namespace ns
{
void Derived::Interface::method() { /*doSomething*/ }
}
/** main.cpp **/
using namespace ns;
int main()
{
Interface* instance = new Derived; //compiler error
}
Questo significa che devo dichiarare il metodo() due volte - Nell'interfaccia del *.h
e nel derived.h
troppo? Non c'è altro modo per aggirare?
Questo non è valido C++. 'public void method() = 0;' Mi sembra più simile a Java. –
Innanzitutto, non c'è motivo di avere un file .cpp in cui l'unica cosa è uno spazio dei nomi vuoto. Non è necessario un file di implementazione per un header che contiene una classe astratta. – Falmarri
@Falmarri è corretto. –