头文件互相包含以及函数调用问题

DAM3000 2009-05-06 11:55:49
头文件互相包含相关的解决方案不少,但是小弟在函数调用的时候遇到了问题


//***********Card.h
#pragma once
//卡牌类

class Player;
class Card
{
public:
...
void doAction(Player &p1,Player &p2,Card &c);
...
};
//***********Card.cpp
void Card::doAction(Player &p1, Player &p2, Card &c)
{
...
p1.HPalter(3);
p2.MPalter(2);
...
}



#pragma once
//***********Player.h

#include "Card.h"
//玩家类
class Player
{
...
public:
//请不要在意小弟把这些东西设为pulbic
CList<Card*,Card*> Handing;
CList<Card*,Card*> Graveyard;
CList<Card*,Card*> Battle;
CList<Card*,Card*> Store;

void HPalter(int i);
void MPalter(int i);
private:
int HP;
int MP;
};
//***********Player.cpp
#include "stdafx.h"
#include "Player.h"
...
void Player::HPalter(int i){HP += i;}
void Player::MPalter(int i){MP += i;}
...


编译时报错了
error C2027: use of undefined type 'Player' see declaration of 'Player'
error C2228: left of '.HPalter' must have class/struct/union

自己揣摩了一下,出错原因大概是因为编译器认为我的Player类中HPalter(int i)和MPalter(int i)两个函数没有定义
这么想对吗?
请问怎么解决这个问题?
...全文
128 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Paradin 2009-05-06
  • 打赏
  • 举报
回复
up
fox000002 2009-05-06
  • 打赏
  • 举报
回复
// Card.h
class Player;

class Card
{
public:
void doAction(Player &p1,Player &p2,Card &c);
};


//***********Card.cpp
#include "Card.h"
#include "Player.h"

void Card::doAction(Player &p1, Player &p2, Card &c)
{
p1.HPalter(3);
p2.MPalter(2);
}


class Card;

class Player
{
public:
//请不要在意小弟把这些东西设为pulbic
// CList<Card*,Card*> Handing;
// CList<Card*,Card*> Graveyard;
// CList<Card*,Card*> Battle;
// CList<Card*,Card*> Store;

Card cc;

void HPalter(int i);
void MPalter(int i);
private:
int HP;
int MP;
};



//Player.cpp
#include "Card.h"
#include "Player.h"

void Player::HPalter(int i){HP += i;}
void Player::MPalter(int i){MP += i;}


goodname 2009-05-06
  • 打赏
  • 举报
回复
你的Player.h
去掉
#include "Card.h"
加上
class Card;

然后实现文件中这两个头文件都包含。
  • 打赏
  • 举报
回复
头文件里怎么不用#inndef呢?

看看这里
http://blog.csdn.net/DavidHsing/archive/2007/11/09/1876788.aspx
DAM3000 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodname 的回复:]
你的card.cpp应该
#include "Player.h"
[/Quote]

首先感谢你的回答。但是这个做法我试过了,会导致头文件互相包含的问题,编译出来的错误更多
goodname 2009-05-06
  • 打赏
  • 举报
回复
你的card.cpp应该
#include "Player.h"

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧