我想在“Dog”类中实现一个接口,但是我收到以下错误。最终目标是使用一个接收可比较对象的函数,以便它可以将对象的实际实例与我通过参数传递的实例进行比较,就像等于。运算符重载不是一个选项,因为我必须实现该接口。 使用“new”关键字创建对象时会触发错误。
“错误2错误C2259:'狗':无法实例化抽象类c:\ users \ fenix \ documents \ visual studio 2008 \ projects \ interface-test \ interface-test \ interface-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;
}
答案 0 :(得分:3)
bool f(const Dog &d)
不是bool f(const IComp& ic)
的实现,因此虚拟bool f(const IComp& ic)
仍未由Dog
答案 1 :(得分:1)
你的班级狗没有实施方法f,因为他们有不同的签名。它需要在Dog类中声明为:bool f(const IComp& d);
,因为bool f(const Dog& d);
是另一种方法。
答案 2 :(得分:1)
bool f(const Dog& d);
不是IComp
virtual bool f(const IComp& ic)=0; //pure virtual function
您对Dog
的{{1}}的定义实际上是隐藏纯虚函数,而不是实现它。