Неопределенная ссылка на enum - PullRequest
3 голосов
/ 21 октября 2010

Я получаю сообщение об ошибке от моего компилятора:

undefined reference to `Pawn::Pawn(Piece::Color)'

Это происходит, когда я делаю это:

// board[][] contains pointers to Piece objects
board[0][0] = new Pawn(Piece::BLACK);

Вот часть класса Pawn:

// Includes...
#include "piece.h"
// Includes...

class Pawn : public Piece {
public:
        // ...

        // Creates a black or white pawn.
        Pawn(Color color);

        // ...
};

Вот часть класса Piece:

class Piece {
public:
        // ...

        enum Color {WHITE, BLACK};

        // ...
};

Почему я получаю эту ошибку компилятора?

Ответы [ 3 ]

7 голосов
/ 21 октября 2010

Ошибка на самом деле не имеет ничего общего с перечислением. Вам нужно определить конструктор Pawn (Color), например,

Pawn::Pawn(Color)
{
...
}
5 голосов
/ 21 октября 2010

Вам необходимо определить тело функции для конструктора.

Этот код выдает ошибку компоновщика: http://www.ideone.com/pGOkn

    Pawn(Color color) ;

Этот код не будет: http://www.ideone.com/EkgMS

    Pawn(Color color) {}
    //                ^^ define the constructor to do nothing.
4 голосов
/ 21 октября 2010

Проблема не в enum, а в том, что компоновщик не может найти реализацию Pawn::Pawn(Color). Вы реализовали конструктор Pawn::Pawn(Color) и он связан здесь?

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