2011-10-01 89 views
1

我想在「Dog」類中實現一個接口,但出現以下錯誤。最終目標是使用一個接收可比對象的函數,以便它可以將對象的實際實例與我通過參數傳遞的對象進行比較,就像等於一樣。運算符重載不是一個選項,因爲我必須實現該接口。 使用「新」關鍵字創建對象時會觸發錯誤。無法在C++錯誤中實例化抽象類

「錯誤2錯誤C2259: '狗':不能實例化抽象類C:\用戶\菲尼克斯\文檔\ Visual Studio 2008的\項目\接口測試\接口測試\接口TEST.CPP 8」

這裏是所涉及的類的代碼:

#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

你Dog類不實現方法F,因爲它們有不同的簽名。它也需要在Dog類中聲明爲:bool f(const IComp& d);,因爲bool f(const Dog& d);是另一種方法。

+0

謝謝你的回答 – HoNgOuRu

1
bool f(const Dog& d); 

實施不是爲IComp

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

你的Dog定義「的實現s f實際上是隱藏純虛函數,而不是實現它。

+0

謝謝,現在正在工作,我得等4分鐘才能接受你的回答。 – HoNgOuRu

相關問題