c++ - 抽象类未定义对`vtable for的引用的生成器错误

标签 c++ virtual-functions

<分区>

Possible Duplicate:
Undefined symbols “vtable for …” and “typeinfo for…”?
C++ Undefined Reference to vtable and inheritance

我的大学要求我完成一个小项目,但遇到了问题。 这是一个简单的象棋游戏项目。

我有一个模糊的错误 undefined reference to `vtable for XXX 当我从抽象类定义继承类时... 这是代码

Pieces.h

class Pieces {
public:
   Pieces(char color) : pieceColor(color) {}
   virtual ~Pieces() {}
   virtual char getPieceType() = 0;
   char getColor() {
     return pieceColor;
   }

   virtual bool isLegalMove(int srcRow, int srcCol, int destRow, int destCol, Pieces* board[8][8]) = 0;

private:
   virtual bool areSquaresLegal(int srcRow, int srcCol, int destRow, int destCol, Pieces* board[8][8]) = 0;
   char pieceColor;
};

这是一个示例继承类,即典当类

Pawn.h

#include "Pieces.h"

class Pawn: public Pieces {
public:
    Pawn(char color) : Pieces(color) {}
    ~Pawn();
private:
    virtual char getPieceType() {
        return 'P';
    }
    bool areSquaresLegal(int srcRow, int srcCol, int destRow, int destCol, Pieces* board[8][8]);
    bool isLegalMove(int srcRow, int srcCol, int destRow, int destCol, Pieces* board[8][8]);
};

最后两个方法在.cpp 文件中实现。 其他每个类显然都与 pawn 类相似。

当我尝试编译时,构建器给我:undefined reference tovtable for Pawn'` 引用构造函数所在的行:

Pawn(char color) : Pieces(color) {}

我哪里错了?

最佳答案

你说你已经实现了最后两个成员函数。我的猜测是您尚未实现已声明但未在类中定义的析构函数。

如果你需要一个非平凡的类析构函数,那么确保你实现了它。如果不是,则删除其声明。

一般来说,这个错误意味着你已经声明了一个非纯虚函数而忘记了实现它;一些流行的编译器将类的多态元数据放在与第一个非纯、非内联成员函数相同的翻译单元中,在这种情况下是析构函数。如果您看到本应是抽象类的错误,那么这通常意味着您忘记将其某些虚函数声明为纯函数。

关于c++ - 抽象类未定义对`vtable for的引用的生成器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12423536/

相关文章:

C++ 问题 :After assigning value to a variable, 另一个变量改变了

c++ - 无法识别 Qt4 现有插槽

C++ typedef 与类冲突

c++ - 在没有基类(非派生)的类中为虚函数添加 final 关键字是否有意义

c++ - 一种简洁的说法 "this class overrides all necessary methods to be non-abstract"

C++ 极小极大函数

c++ - Qt - Glut32 库

c++ - C++多重继承的一些基础知识

php - PHP 中虚函数的正确实现?

c++ - 从继承类实现抽象方法