首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误LNK2001继承问题

错误LNK2001继承问题
EN

Stack Overflow用户
提问于 2014-05-10 13:21:00
回答 1查看 242关注 0票数 0

我正在解决一个家庭作业问题,其中我们必须使用继承。(我还不太擅长继承)。我们将创建一个父类"card_games“,它有两个子类,分别称为"gofish”和"poker“。我们得到了一个模板,我们的main必须遵循这个模板,其余的设计都取决于我们。这是我的头文件:(名为"classes.h")

代码语言:javascript
复制
#include <vector>

using namespace std;

struct cards{
  int rank;
  char suit;
};

class players{
  public:
   int points;
   int active;
   vector<cards> cardhand;
   void printhand(players *gameplayers, int person);
};

class card_games{
  protected:
    players *gameplayers;
    void player_make();
  public:
    virtual void play();
};


class poker :public card_games{
  public:
   void play();
 };


 class gofish :public card_games{
  public:
void play();
  };





void player0_play(players *gameplayers, cards *cardlist, int people);
void createdeck(cards *cardlist);
void shuffle(cards *cardlist);
void deal(cards *cardlist, int people, players *gameplayers);
int getplayers();

我已经确定这个错误与我的虚拟调用有关。具体的错误是:

代码语言:javascript
复制
cardgames_play.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall card_games::play(void)" (?play@card_games@@UAEXXZ)

我相信这会导致我的下一个错误:

代码语言:javascript
复制
card_games.exe : fatal error LNK1120: 1 unresolved externals

不管怎样,我的虚拟void函数出了点问题。下面是我的主要函数:

代码语言:javascript
复制
#include <iostream>
#include "classes.h"



int main(){
  card_games *game;
  int opt;
  game = NULL;
  cout << "Poker 1, Go Fish 2" << endl;
  cin >> opt;
  if (opt == 1)
    game = new poker;
  else if (opt == 2)
    game = new gofish;
  game->play();

  return 0;
}

我们应该大致使用这个模板。如果我理解正确,我创建了一个名为Card_game的游戏类的实例,然后将游戏分配给gofish或poker的一个实例。然后我将“游戏”取消对"play();“函数的引用。剩下的代码,我有一个

void gofish::play(){ blah blah }

和一个

代码语言:javascript
复制
void poker::play(){
blah blah
}

其中有我的其余代码可以正常工作。

任何关于这个错误的帮助我们都非常感谢。谢谢!

附注:我在windows 8上使用的是visual studio 2013。

EN

回答 1

Stack Overflow用户

发布于 2014-05-10 13:29:10

card_games中的方法void play();没有主体,并且它不是纯虚拟的。只需进行更改即可:

代码语言:javascript
复制
class card_games{
protected:
  players *gameplayers;
  void player_make();
 public:
  virtual void play()=0; //make it pure virtual
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23577390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档