2011-10-01 305 views
1

"Dog"クラスの内部にインターフェイスを実装したいのですが、次のエラーが発生しています。最終的な目的は、同等のオブジェクトを受け取る関数を使用して、オブジェクトの実際のインスタンスを、equalsのようにパラメータで渡すものと比較できるようにすることです。オペレータのオーバーロードは、そのインタフェースを実装する必要があるため、オプションではありません。 "new"キーワードを使用してオブジェクトを作成すると、エラーが発生します。C++エラーで抽象クラスをインスタンス化できません

"エラー2エラーC2259: '犬は':プロジェクト\ Visual Studioの2008 \ \ユーザー\フェニックス\ドキュメント\インターフェース・テスト\インターフェイステスト\インターフェイス-TEST.CPP 8:抽象クラスCをインスタンス化することはできません"ここ

が関与するクラスのコードです:

#pragma once 

class IComp 
{ 
    public: 
     virtual bool f(const IComp& ic)=0; //pure virtual function 
}; 

    #include "IComp.h" 
class Dog : public IComp 
{ 
    public: 
     Dog(void); 
     ~Dog(void); 
     bool f(const Dog& d); 
}; 

#include "StdAfx.h" 
#include "Dog.h" 

Dog::Dog(void) 
{ 
} 

Dog::~Dog(void) 
{ 
} 

bool Dog::f(const Dog &d) 
{ 
    return true; 
    } 

#include "stdafx.h" 
#include <iostream> 
#include "Dog.h" 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Dog *d = new Dog; //--------------ERROR HERE** 

    system("pause"); 
     return 0; 
} 

答えて

3

bool f(const Dog &d)bool f(const IComp& ic)の実装ではありませんので、仮想bool f(const IComp& ic)はまだDog

+0

ありがとうございました。 – HoNgOuRu

1

彼らは異なるシグネチャを持っているので、あなたのクラスの犬は、メソッドfを実装していません。 bool f(const Dog& d);は別の方法であるため、Dogクラスのbool f(const IComp& d);としても宣言する必要があります。

+0

お返事ありがとうございました – HoNgOuRu

1
bool f(const Dog& d); 

によって実装されていません 'Dogのあなたの定義の

virtual bool f(const IComp& ic)=0; //pure virtual function 

' ICompための実装ではありませんs fは、実際には仮想関数を実装するのではなく、純粋な仮想関数を隠しています。

+0

ありがとう、その作業は今、私はあなたの答えを受け入れるために4分待たなければならない。 – HoNgOuRu

関連する問題