C ++ ' s реализация чисто виртуальной функции и файлы заголовков

У меня проблемы с реализацией чистых виртуальных функций, унаследованных от некоторого абстрактного класса, когда рассматриваемые классы разделены на *. H и * .cpp файлы. Компилятор ( g ++ ) сообщает мне, что производный класс не может быть создан из-за существования чистых функций.

/** 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
}

Означает ли это, что я должен объявить метод () дважды - в интерфейсах * .h и в производном . h тоже? Нет другого пути?

11
задан mpen 1 August 2019 в 21:48
поделиться