允许嵌套struct具有包含类的实例

时间:2014-07-25 01:07:31

标签: c++ constructor static nested

我试图通过在Path类中声明一个结构来解决c ++缺少静态构造函数的问题,并且在Path类中也使用该结构的静态实例:

class Path
{
    struct StaticPathState
    {
        Path executablePath;
    }

    static StaticPathState s_staticPathState;
};
...
Path::StaticPathState Path::m_staticState;

但是,我收到了编译错误:

  

C2079:'Path :: StaticPathState :: executablePath'使用未定义的类   '路径'

有什么方法可以解决这个问题吗?我是否必须在Path之外声明结构?

我最终做了什么

//.h
Path
{
  static Path s_executablePath;
  static Path initExecutablePath();
}

//.cpp
Path Path::initExecutablePath() {...}
Path Path::s_executablePath = Path::initExecutablePath();

首先不要这样做会感到愚蠢。在c#land上花了太多时间。

编辑:This是我试图复制的功能。

EDIT2:所以这个问题是我需要运行一些代码来初始化executablePath成员。在使用静态构造函数的语言中,我将executablePath作为静态成员直接放入Path类,并在Path的静态构造函数中初始化它。在c ++中,我不确定将此代码放在何处。

2 个答案:

答案 0 :(得分:0)

前瞻声明是你的朋友:

class Path
{
    struct StaticPathState;

    static StaticPathState s_staticPathState;
};

struct Path::StaticPathState
{
    Path executablePath;
};

Path::StaticPathState Path::m_staticState;

但请记住,这是非常非惯用的C ++,可能会混淆任何未来的维护者。不要尝试用C ++编写另一种语言。如果您告诉我们您尝试解决的真正问题,我们可以帮助解决这个问题。

编辑:再次阅读评论,听起来好像你正在寻找具有自己的构造函数的类类型的静态类成员。你试过了吗?

答案 1 :(得分:0)

您可以声明该类的静态成员。在它的定义中,您可以调用静态类方法来进行初始化。例如,

class Path
{
    struct StaticPathState
    {
        Path* executablePath;
    }

    static StaticPathState s_staticPathState;

    static StaticPathState MyStaticConstructor()
    {
       ///Do init work
       return pathState;//An appropriately created StaticPathState
    }
};
...
Path::StaticPathState Path::s_staticPathState = Path::MyStaticConstructor();