Константа X не является именем типа, здесь x - KING - PullRequest
0 голосов
/ 19 декабря 2018

Я получаю сообщение об ошибке в аргументе KING и COLOR, который я передал конструктору Piece.Это мой код, я делаю шахматную игру с классом main, а затем - игровой класс, который создает настольный объект, доска играет в игру и имеет квадраты и фигуры в качестве составных объектов.Они оба связывают отношения

 /////////////////////////PIECE HEADER///////////////////
enum PIECETYPE { KING, QUEEN, ROOK, BISHOP, KNIGHT, PAWN };
enum COLOR { BLACK, WHITE };
class Square;//forward declaration

class Piece
{
    PIECETYPE type;
    COLOR color;
    ...};
/////////////////////PIECE CPP////////////////////////

#include "Piece.h"
#include"Square.h"



Piece::Piece()
{
}
Piece::Piece(PIECETYPE typ, COLOR clr){
    type = typ;
    color = clr;
    pSquare = nullptr;
}
//////////////////////BOARD HEADER: COMPOUNDCLASS////////////////////////
#include"Piece.h"``


class Board
{
    Square square[8][8];
    Piece wK(KING, WHITE);
    Piece bK(KING, BLACK);};

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

В своем классе Board создайте коллекцию фигур, как вы делали для квадратов.См. Метод CreatePieces () ниже:

#include <iostream>
#include <memory>

using namespace std;

enum PIECETYPE { KING, QUEEN, ROOK, BISHOP, KNIGHT, PAWN };
enum COLOR { BLACK, WHITE };
enum RANK { A, B, C, D, E, F, G, H };

class Square
{
public:
    explicit Square() { }

private:
    //COLOR color;
    //RANK rank;
    //int file;
};

class Piece
{
public:
    explicit Piece(PIECETYPE typ, COLOR clr) : type(typ), color(clr) { }

private:
    PIECETYPE type;
    COLOR color;
    Square* pSquare{ nullptr };
};

class Board
{
public:
    explicit Board()
    {
        CreatePieces();
        // Set the pieces in their proper location, etc.
    }

private:
    Square squares[8][8];
    vector<Piece> pieces;

    inline void CreatePieces()
    {
        pieces.emplace_back(Piece(KING, WHITE));
        pieces.emplace_back(Piece(KING, BLACK));
        // etc. for 30 other pieces
    }
};

int main()
{
    unique_ptr<Board> board = make_unique<Board>();
    getchar();
}
0 голосов
/ 19 декабря 2018

Этот синтаксис конструктора нельзя использовать при объявлении переменной-члена класса.Компилятор не знает, пытаетесь ли вы объявить функцию-член с именем wK и типом возврата Piece, в этом случае KING должен быть типом первого аргумента.

class Board {
    Piece wK(KING, WHITE);  // ERROR: this is declaring wK and using its constructor in ambigous way.
    ...
};

Это способ сделать это:

class Board {
    Piece wK;  // declaring the member wK
    Board() : wk(KING, WHITE) {}  // initialize wK in the Board constructor
    ...
};

В качестве альтернативы, в C ++ 11

class Board {
    Piece wK{KING, WHITE};  // Using {} instead of () makes it clear you are not declaring a function
    ...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...