@Herr_Shmulke

Как исправить C2061?

Синтаксическая ошибка: идентификатор "Player". Файл mob.h ст 40
Гуглить пробовал. Ответ так и не нашел

player.h:
#pragma once
#include "Weapon.h"
#include "Mob.h"

class Player
{
public:
	int health, armor, exp, mana;
	int currentHealth, currentArmor, currentMana, toNextLvlExp, balance;
	int missChanceBody, missChanceHead, missChanceLegs;

	Weapon sword;
	Weapon magicStick;

	Player(int _health, int _armor, const Weapon& _sword, const Weapon& _magicStick);
	int takePhysicalDamage(Mob& m);
};


mob.h:
#pragma once
#include <string>
#include "Player.h"

using namespace std;

class Mob
{
public:
	enum mobType {
		PHYSIC,
		MAGIC
	};

	enum attackDir {
		HEAD,
		BODY,
		LEGS
	};

	int health, armor, magicResistance, shockResistance;
	int currentHealth, damage, spreadDamage;
	string name;
	mobType attackType;

	

	/**
	 * Конструктор класса Mob.
	 * Принимает 3 аргумента
	 * _health - здоровье моба
	 * _magicResistance - защита от магического урона
	 * _shockResistance - защита от физического урона
	 * _damage - урон
	 * _spreadDamage - Разброс урона
	 * _name - Имя моба
	 * type - тип атаки моба
	 */
	Mob(int _health, int _magicResistance, int _shockResistance, int _damage, int _spreadDamage, string _name, mobType type);
	int takePhysicalDamage(Player* player, attackDir dir);
	int takeMagicalDamage(Player* player, attackDir dir);
};
  • Вопрос задан
  • 2485 просмотров
Решения вопроса 1
SerJook
@SerJook
кодер
У вас круговая зависимость файлов заголовков.
Решается с помощью forward-declaration.
Добавьте в файл mob.h до "class Mob" следующее:
class Player;

а также удалите строку
#include "Player.h"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
myjcom
@myjcom Куратор тега C++
Compiler Error C2061
The compiler found an identifier where it wasn't expected. Make sure that identifier is declared before you use it.

По правилам языка, чтобы что-то использовать нужно это сначала объявить.
в файле player.h у вас препроцессором вставляется код из "Mob.h"
#include "Mob.h"
где используется Player, объявление которого находится после первого использования.
Нужно использовать Forward declaration
Как исправить

Например так
#pragma once
#include "Weapon.h"

class Mob;
class Player
{
public:
  int health, armor, exp, mana;
  int currentHealth, currentArmor, currentMana, toNextLvlExp, balance;
  int missChanceBody, missChanceHead, missChanceLegs;

  Weapon sword;
  Weapon magicStick;

  Player(int _health, int _armor, const Weapon& _sword, const Weapon& _magicStick);
  int takePhysicalDamage(Mob& m);
};

mob.h:
#pragma once
#include <string>
#include "Player.h"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы