2010-10-21 3 views
3

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

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}; 

     // ... 
}; 

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

ответ

7

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

Pawn::Pawn(Color) 
{ 
... 
} 
+0

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

5

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

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

Pawn(Color color) ; 

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

Pawn(Color color) {} 
    //    ^^ define the constructor to do nothing. 
4

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

Смежные вопросы