Не удается создать экземпляр абстрактного класса в ошибке C ++ - PullRequest
1 голос
/ 01 октября 2011

Я хочу реализовать интерфейс внутри класса "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 ]

3 голосов
/ 01 октября 2011

bool f(const Dog &d) не является реализацией bool f(const IComp& ic), поэтому виртуальная bool f(const IComp& ic) все еще не реализована Dog

1 голос
/ 01 октября 2011
    bool f(const Dog& d);

не является реализацией для IComp

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

Ваше определение Dog f фактически скрывает чисто виртуальную функцию вместо ее реализации.

1 голос
/ 01 октября 2011

Ваш класс Dog не реализует метод f, потому что они имеют разные подписи.Он должен быть объявлен как: bool f(const IComp& d); также в классе Dog, поскольку bool f(const Dog& d); - это вообще другой метод.

...