C++ I';我很难弄清楚如何访问嵌套类之外的变量 嵌套类无法访问类外部的非静态元素
嵌套类有点问题,正如我提供的代码所示,已经声明了2个类,嵌套类C++ I';我很难弄清楚如何访问嵌套类之外的变量 嵌套类无法访问类外部的非静态元素,c++,C++,嵌套类有点问题,正如我提供的代码所示,已经声明了2个类,嵌套类实体位于类游戏的私有字段内,出于某种原因,嵌套类不允许我访问它之外的变量map\u info。 我只找到了一个解决方案,它涉及在实体类中创建游戏类的实例 我试着做了一件事 将map_info声明为静态类型(无法解决此问题) 在嵌套类中声明游戏类的实例 我在这里搜索了相同的问题,但结果不符合我的原始代码,但是可能有一点机会,我错过了什么,如果是这样,请发送链接 这是我在这个网站上的第一个问题,所以请尽可能多地提供反馈,哪怕是最轻微的
实体
位于类游戏
的私有字段内,出于某种原因,嵌套类不允许我访问它之外的变量map\u info
。
我只找到了一个解决方案,它涉及在实体类中创建游戏类的实例
我试着做了一件事
这是我在这个网站上的第一个问题,所以请尽可能多地提供反馈,哪怕是最轻微的反馈都会得到感谢!谢谢 这不是你想要的。嵌套类只是游戏类的类成员,如果是公共类,则可以作为
Game::NestedName
访问,如果是私有类,则不能在非类中访问。比如说
#包括
班级游戏
{
公众:
游戏(){};
void spawnewPrivateEntity(双x、双y、双z)
{
private_entities.push_back(PrivateEntity{x,y,z});//访问private成员PrivateEntity是正确的
}
struct PublicEntity{double x,y,z;};//可以从任何地方访问公共嵌套结构
void-newPublicEntity(PublicEntity)
{
公共实体。推回(实体);
}
私人:
struct PrivateEntity{double x,y,z;};//只能在此类或友元成员内使用私有嵌套结构
std::vector private_entities={};
std::vector public_entities={};
}
int main()
{
auto en=Game::PublicEntity{0.0,9.0,1.9};//有效
auto en2=Game::PrivateEntity{0.0,0.0,0.0};//不工作:此结构是Game类的私有成员
}
你可以这样做:
类游戏
{
公众:
游戏(标准::字符串映射信息):映射信息(映射信息)
{};
std::string getMapInfo(){return map_info;}
私人:
std::字符串映射信息;
};
类实体
{
公众:
实体(游戏*游戏):游戏(游戏)
{};
无效检查()
{
如果(游戏->getMapInfo()!=“无”){/*一些代码*/}
};
私人:
游戏*游戏;
}
您不能直接访问外部类的成员,您需要一个提供实例的参数。玩家
需要知道从游戏
的哪个实例获取地图信息
。这种知识不是自动产生的。玩家
实例和游戏
实例之间没有隐含的联系。假设你有一个class实体
对象,位于class游戏
实体的任何实例之外,那么实体
将引用什么变量?编译器不知道您不打算这样做。实体
对象需要知道它们应该引用的是游戏
的哪个实例。您真的需要嵌套类吗?使用单独的类可以解决这个问题。另外,独立(非嵌套)类增加了可重用性。map\u info
是类Game
的成员。必须有游戏
对象才能有地图信息
。此代码从不创建或提及游戏
对象,因此没有地图信息
嵌套类只是类,只能在游戏类内部使用
嵌套类也可以在该类外部使用。访问限定符可以阻止对它的访问,但这与嵌套的类无关。
class Game
{
private:
std::string map_info;
class entity
{
protected:
double x, y, z;
public:
};
class player : public entity
{
private: std::string name;
player(std::string _name) : name(_name) {};
void check()
{
/*
this is the portion of the code that i'm having problem with
the error: "a nonstatic member reference must be relative to a specific object"
*/
if (map_info != 'none')
{
// do stuff
}
}
};
public:
std::string Getmap() { return map_info; }
Game() //constructor
{
// does stuff
}
};