gpt4 book ai didi

C++ 类 : errors with identifiers

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:45 25 4
gpt4 key购买 nike

我有一个包含 2 个类的 C++ 项目。

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(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);
};

敌人.H

#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);
};

我得到的错误是这些:

同时,这些是 CodeBlocks 给我的错误:

有人可以帮我解决这个问题吗?

最佳答案

问题是你的 Player类指的是你的 Enemy类,也指你的 Player类:

class Enemy
{
void Attack(Player *_attackedPlayer);
}
class Player
{
void Attack(Enemy *_attackedEnemy);
}

你需要的是前向声明,通知编译器一个特定的类存在,而不告诉它关于这个类的任何信息。

在这里你可以在文件Enemy.h中添加下面一行, 在 Enemy 的定义之前类:

class Player;

this question看看你能用前向声明做什么或不能做什么。

为什么在这里需要它,即使有相关的#include指令

#include指令基本上是预处理器的一条指令,告诉它用包含的文件替换指令。 #pragma once指令确保每个翻译单元不会多次包含该文件。

在 Main.cpp 中,这是正在发生的事情:

  • #include "Player.h" : 文件 Player.h包括在内。
  • 第一行Player.h#include "Enemy.h" : 文件 Enemy.h包括在内。
  • 第一行Enemy.h#include "Player.h" : 自文件 Player.h已经包含在内,该指令将被忽略。
  • 定义Enemy
  • 定义Player
  • main 的定义功能

如您所见,即使包含,在定义类 Enemy 时也是如此,编译器不知道类 Player还存在。这就是为什么您绝对需要在此处进行前向声明的原因。

关于C++ 类 : errors with identifiers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com