充斥着标识符错误

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