充斥着标识符错误
Swarmed with identifier errors
我一直在为期末项目编写大富翁游戏。所以我以为我在滚动,并且我已经用我的伪代码弄清楚了一切。但是,我似乎忘记了如何正确处理包含,我知道这是问题所在,因为我能够将其完善到那个程度,但我不确定如何解决它。
在我的代码的这个超级精简版本中,我有三个 .h
文件 "Space.h",这是一个 abstract/virtual class,必须由各种继承不同的 space 可以出现在典型的大富翁棋盘上:财产、监狱、税收、机会、公益金等。必须继承的功能是 运行(Player&),它是 "run" 当你降落在棋盘上的特定 space 上时,所有使用 运行 的函数都使用通过参数传递的玩家。
#pragma once
#include <string>
#include "Player.h"
class Space
{
public:
virtual void run(Player&) = 0;
};
我的第二个 .h 文件是 "Property.h",它继承自 Space
#pragma once
#include "Space.h"
class Property : Space
{
public:
void run(Player&) override;
int i{ 0 };
};
最后我有 "Player.h",它有两个变量,一个名称和一个它拥有的属性向量。
#pragma once
#include <string>
#include <vector>
#include "Property.h"
class Player
{
public:
std::string name{ "foo" };
void addProperty(Property p);
private:
std::vector <Property> ownedProperties;
};
这是一个非常基本的 属性 实现
#include "Property.h"
#include <iostream>
void Property::run(Player & p)
{
std::cout << p.name;
}
播放器实现
#include "Player.h"
#include <iostream>
void Player::addProperty(Property p)
{
ownedProperties.push_back(p);
}
最后是主要内容
#include "Player.h"
#include "Space.h"
#include "Property.h"
int main()
{
Player p{};
Property prop{};
prop.run(p);
system("pause");
}
每次这是 运行 我都会遇到很多错误,我确定它必须对循环包含逻辑做一些事情,播放器包括 属性 和 属性 包括 space,其中包括播放器。但是,考虑到需要 #include
才能知道所有内容是如何定义的,我没有看到解决方法吗?还是这些错误指的是别的东西?
您有一个循环包含问题。 Player 包含 属性,其中包含 Space,后者又包含 Player。
你可以通过在 Space.h 中不包含 Player.h 来打破循环,只向前声明 class
#pragma once
class Player;
class Space
{
public:
virtual void run(Player&) = 0;
};
我一直在为期末项目编写大富翁游戏。所以我以为我在滚动,并且我已经用我的伪代码弄清楚了一切。但是,我似乎忘记了如何正确处理包含,我知道这是问题所在,因为我能够将其完善到那个程度,但我不确定如何解决它。
在我的代码的这个超级精简版本中,我有三个 .h
文件 "Space.h",这是一个 abstract/virtual class,必须由各种继承不同的 space 可以出现在典型的大富翁棋盘上:财产、监狱、税收、机会、公益金等。必须继承的功能是 运行(Player&),它是 "run" 当你降落在棋盘上的特定 space 上时,所有使用 运行 的函数都使用通过参数传递的玩家。
#pragma once
#include <string>
#include "Player.h"
class Space
{
public:
virtual void run(Player&) = 0;
};
我的第二个 .h 文件是 "Property.h",它继承自 Space
#pragma once
#include "Space.h"
class Property : Space
{
public:
void run(Player&) override;
int i{ 0 };
};
最后我有 "Player.h",它有两个变量,一个名称和一个它拥有的属性向量。
#pragma once
#include <string>
#include <vector>
#include "Property.h"
class Player
{
public:
std::string name{ "foo" };
void addProperty(Property p);
private:
std::vector <Property> ownedProperties;
};
这是一个非常基本的 属性 实现
#include "Property.h"
#include <iostream>
void Property::run(Player & p)
{
std::cout << p.name;
}
播放器实现
#include "Player.h"
#include <iostream>
void Player::addProperty(Property p)
{
ownedProperties.push_back(p);
}
最后是主要内容
#include "Player.h"
#include "Space.h"
#include "Property.h"
int main()
{
Player p{};
Property prop{};
prop.run(p);
system("pause");
}
每次这是 运行 我都会遇到很多错误,我确定它必须对循环包含逻辑做一些事情,播放器包括 属性 和 属性 包括 space,其中包括播放器。但是,考虑到需要 #include
才能知道所有内容是如何定义的,我没有看到解决方法吗?还是这些错误指的是别的东西?
您有一个循环包含问题。 Player 包含 属性,其中包含 Space,后者又包含 Player。
你可以通过在 Space.h 中不包含 Player.h 来打破循环,只向前声明 class
#pragma once
class Player;
class Space
{
public:
virtual void run(Player&) = 0;
};