对枚举的未定义引用

时间:2010-10-21 18:36:21

标签: c++ polymorphism

我从编译器收到此错误消息:

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 个答案:

答案 0 :(得分:7)

该错误与enum没有任何关系。您需要定义Pawn(Color)构造函数,例如

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

答案 1 :(得分:5)

您需要为构造函数定义一个函数体。

此代码提供链接器错误:http://www.ideone.com/pGOkn

    Pawn(Color color) ;

此代码不会:http://www.ideone.com/EkgMS

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

答案 2 :(得分:4)

问题不在于枚举,而是链接器无法找到Pawn::Pawn(Color)的实现。您是否实现了Pawn::Pawn(Color)构造函数,是否在此链接?