Конструктор не может сделать объект из абстрактного класса - PullRequest
0 голосов
/ 21 октября 2011

Я программирую шахматную доску, и у меня есть шахматная фигура базового класса (schaakstuk на моем языке), и все фигуры, такие как король, королева, получены из этого базового класса.создать объект и заполнить массив объектами, чтобы начать игру.Visual Studio сообщает мне об этой строке несколько ошибок:

bord[1][kolom] = new Schaakstuk(Schaakstuk::WIT);
bord[6][kolom] = new Pion(Schaakstuk::ZWART);

, которые невозможно создать из абстрактного класса.Я не вижу ошибки, сначала я подумал, что я использовал чистую вирулентную функцию в своем производном классе, но это не так, я использую только чистую виртуальную функцию в своем базовом классе.

Конструктор

for( int kolom = 0; kolom < SIZE; kolom++ )
{
    bord[1][kolom] = new Pion(Schaakstuk::WIT);
    bord[6][kolom] = new Pion(Schaakstuk::ZWART);
}

Pion.h

#include "Schaakstuk.h"
#include "Exceptions.h"

#ifndef PION
#define PION

class Pion: public Schaakstuk
{
public:
    Pion(void);
    ~Pion(void);
    bool ZetIsLegaal( int rij1, int kolom1, int rij2, int kolom2 ) const;
    void PrintStuk( void ) const;
    void GeefCor( int tabel [8][2], int rij, int kolom, int rij1, int kolom1) const;
    bool IsPion( void ) const { return true; };

private:
    bool ControleerZet( int rij1, int kolom1, int rij2, int kolom2 ) const;
};

#endif

Schaakstuk.h

#ifndef SCHAAKSTUK
#define SCHAAKSTUK
static const int SIZE1 = 8;

class Schaakstuk
{
public:
    enum kleurType { WIT, ZWART };
    Schaakstuk(kleurType kleur = WIT)
    {
        this->kleur = kleur;
    };
    virtual bool ZetIsLegaal( int rij1, int kolom1, int rij2, int kolom2 ) = 0;
    virtual void PrintStuk( void ) = 0;
    virtual void GeefCor( int tabel [8][2], int rij, int kolom, int rij1, int kolom1) = 0;
    kleurType GeefKleur( void ) const { return kleur; };
    virtual bool IsPion( void ) = 0;

protected:
    bool static NietOutOfBounds( int rij, int kolom );

private:
    kleurType kleur;
};
#endif

- это моя выпадающая коробка с файлами кода.Кто-нибудь может мне помочь?

это ошибки:

http://pastebin.com/82j08rry

и вот полный код

http://ideone.com/sWjxS

Ответы [ 2 ]

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

Если ошибка повторяет строку «Не удается создать экземпляр абстрактного класса», то в следующей строке должно быть указано, какой метод является абстрактным.

Скорее всего, вы объявили чистый виртуальный объект в базовом классе, но не переопределили его (или не изменили должным образом; см. Ниже) в производном классе.

Сначала проверьте, есть ли у вас переопределение в Schaakstuk и Pion, а затем убедитесь, что вы вообще не изменили подпись. Это может быть другая постоянная / изменчивая квалификация или другие параметры метода.

2 голосов
/ 21 октября 2011

Слово «абстрактный» - это отдача. Вам нужно создать из конкретного класса - то есть компилятор должен знать все о плюсах и минусах этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...