无法在C ++错误中实例化抽象类

时间:2011-10-01 18:24:23

标签: c++ interface instantiation

我想在“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;
}

3 个答案:

答案 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}}的定义实际上是隐藏纯虚函数,而不是实现它。