我的私有变量Player_player出错了;和等级_level;它告诉我它缺少类型说明符,我不知道为什么会这样。我已经为Level和Player制作了类,所以我不能使用Player和Level来指定变量类型吗?
感谢您的帮助,
麦克
//GameSystem.h
#pragma once
#include "Player.h"
#include "Level.h"
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <vector>
using namespace std;
class GameSystem
{
public:
GameSystem(string levelFileName);
void playGame();
private:
Level _level;
Player _player;
};
#
// Player.h
#pragma once
#include "GameSystem.h"
#include "Level.h"
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <vector>
using namespace std;
class Player
{
public:
Player();
void initPlayer(int level, int health, int attack, int defense, int experience);
//Setters
void setPosition(int x, int y);
//Getters
void getPosition(int &x, int &y);
private:
//Properties
int _level;
int _health;
int _attack;
int _defense;
int _experience;
//Position
int _x;
int _y;
};
答案 0 :(得分:2)
您的GameSystem.h
文件包含以下行:
#include "Player.h"
您的Player.h
文件包含以下行:
#include "GameSystem.h"
这可能不错。除了头文件中的Player
类声明不使用GameSystem.h
中的任何内容之外,请从头文件中删除GameSystem.h
(我建议删除所有#include
那不能解决Player.h头文件中的任何内容)。
编辑1:
我更改了头文件,并使用Include Guards。我没有收到任何错误
Player.hpp:
#ifndef PLAYER_HPP
#define PLAYER_HPP
class Player
{
public:
Player();
void initPlayer(int level, int health, int attack, int defense, int experience);
//Setters
void setPosition(int x, int y);
//Getters
void getPosition(int &x, int &y);
private:
//Properties
int _level;
int _health;
int _attack;
int _defense;
int _experience;
//Position
int _x;
int _y;
};
#endif // PLAYER_HPP
GameSystem.hpp:
#ifndef GSYSTEM_HPP
#define GSYSTEM_HPP
#include "Player.hpp"
#include "Level.hpp"
#include <string>
using namespace std;
class GameSystem
{
public:
GameSystem(string levelFileName);
void playGame();
private:
Level _level;
Player _player;
};
#endif // GSYSTEM_HPP
我更改了文件扩展名,以帮助区分C语言头文件(.h)和C ++语言头文件(.hpp)。
我还通过删除未使用的包含文件来简化头文件。
答案 1 :(得分:0)
这里有一个依赖问题,有两个解决方案。
首先,Player.h实际上并不依赖于GameSystem.h,因此不要在Player.h中包含GameSystem.h。
//Player.h
#pragma once
//Remove GameSystem.h
//#include "GameSystem.h"
#include "Level.h"
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <vector>
如果出于某种原因,你需要在Player类中使用GameSystem类声明,那么就这样做:
//Player.h
#pragma once
#include "Level.h"
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <vector>
//Declare the class
class GameSystem;
您需要在.cpp文件中包含完整的头文件,但实际上并不需要完整的类定义来在另一个类定义中使用类(实际上,GameSystem.h不会甚至需要包含Player.h,它只能声明但不能定义Player类)