問題のクラスが*.h
と*.cpp files
に分割されている場合、いくつかの抽象クラスから継承された純粋な仮想関数を実装する際に問題があります。コンパイラ(g++
)は、純粋な関数が存在するため、派生クラスをインスタンス化できないことを伝えています。インタフェースの*.h
に、あまりにもderived.h
に - 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
}
は、これは私が二回)(メソッドを宣言
を持っていることを意味するのでしょうか?周りに他の方法はありますか?
これは無効なC++です。 'public void method()= 0;'はJavaに似ています。 –
まず、空の名前空間だけの.cppファイルを持つ理由はありません。抽象クラスに参加するヘッダーの実装ファイルは必要ありません。 – Falmarri
@Falmarriは正しいです。 –