C ++不支持default-int

时间:2015-04-08 16:48:26

标签: c++ class variables types ascii

我的私有变量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;
  };

2 个答案:

答案 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类)