C++;类:带有标识符的错误 我在C++中有一个2个类的项目。
MAIN.CPP:C++;类:带有标识符的错误 我在C++中有一个2个类的项目。,c++,class,C++,Class,MAIN.CPP: #include <iostream> #include <conio.h> #include "Player.h" #include "Enemy.h" using namespace std; int main() { const int startHealth = 100, startArmor = 50, startEnemyHealth = 70, startWeapon = 1; Player *Mick = new Player(s
#include <iostream>
#include <conio.h>
#include "Player.h"
#include "Enemy.h"
using namespace std;
int main()
{
const int startHealth = 100, startArmor = 50, startEnemyHealth = 70, startWeapon = 1;
Player *Mick = new Player(startHealth, startArmor, startWeapon);
Enemy *Mon = new Enemy(startEnemyHealth);
cout << "START!" << endl;
cout << Mick->Health << " : " << Mick->Armor << endl;
cout << "ENEMY ATTACKS!" << endl;
Mon->Attack(Mick);
cout << "DAMAGE TAKEN!" << endl;
cout << Mick->Health << " : " << Mick->Armor << endl;
cout << "YOU ATTACK!" << endl;
Mick->Attack(Mon);
cout << "ENEMY'S HEALTH!" << endl;
cout << Mon->Health << endl;
_getch();
return 0;
}
敌人.H
#pragma once
#include "Enemy.h"
class Player
{
public:
int Health, Armor;
int Weapon;
public:
Player(const int _startHealth, const int _startArmor, const int _startWeapon);
~Player();
void Attack(Enemy *_attackedEnemy);
};
#pragma once
#include "Player.h"
class Enemy
{
public:
float Speed;
int Damage;
int Health;
public:
Enemy(const int _startEnemyHealth);
~Enemy();
void Attack(Player *_attackedPlayer);
void Refresh(Enemy *_enemyToRefresh);
};
我得到的错误如下:
同时,这些是代码块给我的错误:
有人能帮我解决这个问题吗?问题是你的
玩家
职业是指你的敌人
职业,也指你的玩家
职业:
class Enemy
{
void Attack(Player *_attackedPlayer);
}
class Player
{
void Attack(Enemy *_attackedEnemy);
}
class Player;
您需要的是转发声明,通知编译器某个特定类存在,而不告诉它任何有关该类的信息
在这里,您可以在文件敌方.h
中,在敌方
类的定义之前添加以下行:
class Enemy
{
void Attack(Player *_attackedPlayer);
}
class Player
{
void Attack(Enemy *_attackedEnemy);
}
class Player;
查看以了解如何处理转发声明
为什么在这里需要它,即使有相关的#include
指令
#include
指令基本上是预处理器的指令,它告诉预处理器用包含的文件替换该指令。#pragma once
指令确保每个翻译单元不会多次包含该文件
在Main.cpp中,发生了以下情况:
:包含文件#包含“Player.h”
Player.h
的第一行是Player.h
:包含文件#包含“敌方.h”
敌方.h
- 敌方.h的第一行是
:由于文件#include“Player.h”
已经包含在内,因此该指令被忽略Player.h
- 敌人的定义
播放器的定义
主功能的定义
如您所见,即使使用include,在定义类
敌人
时,编译器也不知道类播放器
是否存在。这就是为什么您在此处绝对需要转发声明的原因。您必须在player.h和敌军.h中转发声明类,因为两者都包含对方,但它们无法找到完整的类定义。可能是重复的谢谢,真的。非常感谢!!但是,我可以问你为什么需要向前声明吗?即使我在两个类中都包含了.h?我有一个问题,类名的第一个字母是否应该大写?或者它不再重要了?(用php)Tnx@stack在C++中,用大写字母来启动类/结构/枚举名称是常见的做法,但没有什么可以强迫你。只要您的命名约定在一个项目中是一致的,就可以了。