Tengo algunos problemas para implementar funciones virtuales puras heredadas de alguna clase abstracta, cuando las clases en cuestión se dividen en *.h
y *.cpp files
. El compilador (g++
) me dice que la clase derivada no se puede instanciar debido a la existencia de funciones puras.Implementación pura de la función virtual de C++ y archivos de encabezado
/** 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
}
¿Quiere decir esto que tengo que declarar el método() dos veces - en la interfaz de *.h
y en el derived.h
también? ¿No hay otra forma de evitarlo?
Esto no es válido C++. 'public void method() = 0;' se parece más a Java para mí. –
Primero, no hay razón para tener un archivo .cpp en el que lo único es un espacio de nombres en blanco. No necesita un archivo de implementación para un encabezado que contenga una clase abstracta. – Falmarri
@Falmarri es correcto. –