多类编译错误

时间:2014-05-24 20:16:14

标签: c++ c gcc virtual

还在学习c ++,但是我坚持到这里,我得到了这些课程:

Case.cpp:

#include "../inc_bomber/Case.hh"

Case::Case()
{

}

Case::~Case()
{

}

Case.hh:

#ifndef _CASE_HH_
# define _CASE_HH_

enum Type
  {
    FLOOR,
    WALL,
    BOMB,
    BLOCK,
    PLAYER1,
    PLAYER2,
    BOT,
    BONUS,
  };

class Case
{
private:

public:
  Case();
  virtual ~Case();

  virtual Type  getType() const = 0;
  virtual void  action() = 0;
  virtual int   getPos(int x, int y);
};

#endif /* CASE_HH_ */

我在这样的类上使用虚拟:

Player1.hh:

#ifndef _PLAYER1_HH_
# define _PLAYER1_HH_

#include "Case.hh"
#include "Map.hh"

class Player1 : public Case
{
private:
  int  x;
  int  y;

public:
  Player1();
  ~Player1();
  virtual Type getType() const;
  virtual void action();
  virtual void print_stuff();
  virtual int getPos(int x, int y);
};

#endif /* _PLAYER1_HH */

在编译时我得到了这个错误,我想我混淆了虚拟用法,但仍然没有找到我的错误

g++ -Wall -Wextra -ansi -g3 -I includes/  -c src_bomber/Case.cpp -o src_bomber/Case.o
g++ -o bomber src_bomber/main.o src_bomber/GameMain.o src_bomber/Map.o src_bomber/Case.o src_bomber/Floor.o src_bomber/Block.o src_bomber/Wall.o src_bomber/Bomb.o src_bomber/Bot.o src_bomber/Player1.o src_bomber/Player2.o -Llibs/ -lgdl_gl -lGL -lGLEW -ldl -lrt -lfbxsdk -lSDL2 -lpthread -Wl,-rpath=./libs/
src_bomber/Case.o:(.rodata._ZTV4Case[vtable for Case]+0x30): undefined reference to `Case::getPos(int, int)'
collect2: ld returned 1 exit status
make: *** [bomber] Error 1

1 个答案:

答案 0 :(得分:2)

Case::getPos(int, int);未标记为纯虚拟(= 0),因此必须具有提供的实现(如果您在getPos(int,int)的引用上调用Case)。您应该= 0添加Case::getPos(int,int),就像Case的所有其他虚拟成员函数一样,或者您应该添加Case::getPos(int,int)的实现,就像您一样使用Case的构造函数和析构函数。