我正在编写一个棋盘,我有一个基类棋子(我的语言为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
是带有代码文件的Dropbox。有人能帮助我吗?
这是错误:
这是完整的代码
答案 0 :(得分:3)
如果错误沿着“无法实例化抽象类”的行,那么下一行应该告诉你哪个方法是抽象的。
最有可能的是你在基类中声明了一个纯虚拟,但是没有在派生类中覆盖它(或者正确地覆盖它;见下文)。
首先检查以确保在Schaakstuk
和Pion
中有覆盖,然后检查以确保您根本没有更改签名。这可能是不同的常量/挥发性限定条件,或不同的方法参数。
答案 1 :(得分:2)
“抽象”这个词就是赠品。你需要从一个具体的类创建 - 即编译器需要知道关于该对象的来龙去脉的一切。