0

也许标题不够合适。

我有两个类“播放器”和“升级”

  • Player 在升级前被声明。

但是我需要 Player 类中的一个方法,它使用指向 Upgrade 类的指针

如果我尝试编译它,我会得到“升级”尚未声明。我给出一个示例代码。请注意,我不能只切换两个类的位置,因为 Upgrade 还有一些具有指向 Player 的方法

class Player{
    string Name;
    getUpgrade(Upgrade *); // It's a prototype
};
class Upgrade{
    double Upgradeusec;
    somePlayerData(Player *); // It's a prototype
};

PD:我已经搜索了大约 1 个小时,但没有结果。

注意:这只是一个示例代码,因为真实的会很大

4

4 回答 4

3

您需要在定义 Player 类之前转发声明 Upgrade;例如

class Upgrade;
class Player { ... };
class Upgrade { ... };

这当然意味着两个类之间的非常紧密的耦合,根据具体情况,这可能是不可取的。

于 2013-08-21T04:07:14.827 回答
2

您可以转发声明它。

在具有类Player#includes代码的文件中,只需在顶部添加以下行#defines

class Upgrade;

class Player
{
      //the definition of the Player class
}

编译器将尊重这个前向声明,并且会继续前进而不会抱怨。

于 2013-08-21T04:07:19.963 回答
1

什么是 C++ 中的前向声明?

只需在代码中添加前向声明:

class Upgrade; //forward declaration
class Player{
    string Name;
    getUpgrade(Upgrade *); // It's a prototype
};
class Upgrade{
    double Upgradeusec;
    somePlayerData(Player *); // It's a prototype
}

;

于 2013-08-21T04:32:44.180 回答
0

您需要前向声明。http://en.wikipedia.org/wiki/Forward_declaration C++ 有很多复杂的规则来指定何时可以使用不完整的类型。

class Upgrade;   //<<<< add this line.
Class Player{
    string Name;
    getUpgrade(Upgrade); // It's a prototype
};
Class Upgrade{
    double Upgradeusec;
    somePlayerData(Player); // It's a prototype
};
于 2013-08-21T04:09:21.577 回答