C++で「抽象クラスをインスタンス化できません」というエラーをどのように処理しますか? ここで同様のエラーのいくつかを見てきましたが、どれもまったく同じではないか、私が抱えている問題ではないようです。しかし、繰り返しになりますが、いくつかのことを確認する必要があることを認めます。コンパイルエラーは次のとおりです。
これにより、次のページに移動します: http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(C2259);k(VS.ERRORLIST)&rd=true C ++プログラムですが、ページは抽象クラスを「インターフェース」と呼んでいます:
インターフェイスから派生し、パブリック以外のアクセス許可を使用して派生クラスにインターフェイス メソッドを実装すると、C2259 が表示されることがあります。これは、派生クラスに実装されているインターフェイス メソッドがパブリック アクセスを持つことをコンパイラが想定しているために発生します。より制限的なアクセス許可を持つインターフェイスのメンバー関数を実装すると、コンパイラはそれらをインターフェイスで定義されたインターフェイス メソッドの実装とは見なさないため、派生クラスは抽象クラスになります。
この問題には、次の 2 つの回避策があります。
実装したメソッドのアクセス権を公開します。
派生クラスに実装されているインターフェイス メソッドのスコープ解決演算子を使用して、実装されているメソッド名をインターフェイスの名前で修飾します。
悪いニュースは、クラスですべてのメソッドを既に公開していることです。
class AmbientOccluder: public Light {
public:
AmbientOccluder(void);