2011-10-21 2 views
-1

저는 체스 판을 프로그래밍하고 있으며, 기본 클래스 chesspiece (내 언어로는 schaakstuk)를 사용했으며 king, queen과 같은 모든 조각은 기본 클래스에서 파생되었습니다.생성자가 추상 클래스에서 객체를 만들 수 없습니다.

이제 객체를 만들고 객체로 배열을 채워서 게임을 시작하겠습니다. Visual Studio에서 다음 줄에 몇 가지 오류를 표시합니다.

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

추상 클래스로는 만들 수 없습니다. 나는 오류를 보지 못했지만, 처음에는 파생 된 클래스에서 순수한 virutal 함수를 사용하고 있다고 생각했지만 실제로는 기본 클래스에서 순수 가상 함수 만 사용하고 있습니다.

생성자

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

+8

알 수없는 사용자의 보관 용 계정에서 RAR 파일을 다운로드하지 않는 것이 확실합니다. –

+1

idecase.com에 테스트 케이스 게시. –

+0

클래스 선언을 질문에 넣어주세요. 그러나 오류로 판단하면'Pion'에 순수 가상 함수가 있습니다. 사실이라면'Pion'의 새로운 인스턴스를 직접 만들 수 없으며 그 하위 클래스 중 하나만 모든 순수 가상을 구현하며 추상이 아닙니다. – birryree

답변

2

에게 있습니다. 구체적인 클래스에서 생성해야합니다. 즉, 컴파일러는 해당 객체의 내부 및 외부에 대한 모든 것을 알아야합니다.

+0

John .cpp .h 파일 만 포함합니다. – user1007522

3

오류가 "추상 클래스를 인스턴스화 할 수 없습니다"라는 줄을 따르는 경우 다음 줄은 어떤 방법이 추상인지를 알려야합니다.

아마도 기본 클래스에서 순수 가상을 선언했지만 파생 클래스에서이 가상 클래스를 재정의 (또는 올바르게 재정의, 아래 참조)하지 않았을 가능성이 큽니다.

먼저 SchaakstukPion에 재정의가 있는지 확인한 다음 서명을 전혀 변경하지 않았는지 확인하십시오. 이것은 다른 const/volatile 자격 또는 다른 메소드 매개 변수 일 수 있습니다.

+0

오류 메시지에 따라이 문제가 발생했습니다. 모든 순수 가상 함수를 하위 클래스에 구현해야하며 서명은 정확히 일치해야합니다. – AHelps

+1

감사합니다 오류가 발생했습니다. const = 0이 필요했습니다 ;-) 모든 것이 이제는 잘 작동합니다. – user1007522

관련 문제