繁体   English   中英

类变量的前向声明

[英]Forward declaration of class variable

我可以在其他类中转发声明的类变量以避免循环依赖吗?如果可以,怎么办? 例:

//another file
class Engine;
extern vector<Block*> Engine::MapBlocks;

//Engine.h
class Engine
{
public:
   vector<Block*> MapBlocks;
};

这是可能的?

没有

您的类声明必须完整,不能拆分或部分声明它。

如果您询问遇到的实际问题,我们仍然可以为您提供帮助。 很可能有解决方案,只是没有解决这个抽象问题。

不,您尝试做的事是不可能的。 在类定义之外不能声明非静态类成员。 如果允许这样的事情,它将允许任何代码随意修改任何类(例如,通过声明实际上不是该类一部分的成员)。 从逻辑上讲,这完全破坏了使用类(例如封装)的意图。

但是,可以在不可见定义的情况下传递和存储指向类类型的指针。 在这种情况下

#include <vector>     // necessary for use of std::vector

class Block;

class Engine
{
   public:
     std::vector<Block*> MapBlocks;

      // preferably declare constructors and/or other member functions
      //    that initialise MapBlocks appropriately to needs
};

这将起作用,因为编译器不需要具有Block定义的可见性即可将指针存储在容器中。

自然地,任何试图实例化Block代码(例如some_engine.MapBlocks.push_back(new Block) )或调用其成员函数(例如some_engine.MapBlocks[some_valid_index]->some_member_function() )都依赖于对Block类的定义的可见性。 ,而不仅仅是前瞻性声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM