对枚举的未定义引用

Pie*_*ter 3 c++ polymorphism

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

undefined reference to `Pawn::Pawn(Piece::Color)'
Run Code Online (Sandbox Code Playgroud)

当我这样做时会发生这种情况:

// board[][] contains pointers to Piece objects
board[0][0] = new Pawn(Piece::BLACK);
Run Code Online (Sandbox Code Playgroud)

这是Pawn类的一部分:

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

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

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

        // ...
};
Run Code Online (Sandbox Code Playgroud)

这是Piece类的一部分:

class Piece {
public:
        // ...

        enum Color {WHITE, BLACK};

        // ...
};
Run Code Online (Sandbox Code Playgroud)

为什么我收到此编译器错误?

Dav*_*man 7

该错误与枚举没有任何关系.你需要定义Pawn(Color)构造函数,例如,

Pawn::Pawn(Color)
{
...
}
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 5

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

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

    Pawn(Color color) ;
Run Code Online (Sandbox Code Playgroud)

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

    Pawn(Color color) {}
    //                ^^ define the constructor to do nothing.
Run Code Online (Sandbox Code Playgroud)