还在学习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
答案 0 :(得分:2)
Case::getPos(int, int);
未标记为纯虚拟(= 0
),因此必须具有提供的实现(如果您在getPos(int,int)
的引用上调用Case
)。您应该= 0
添加Case::getPos(int,int)
,就像Case
的所有其他虚拟成员函数一样,或者您应该添加Case::getPos(int,int)
的实现,就像您一样使用Case
的构造函数和析构函数。