我试图通过在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 ++中,我不确定将此代码放在何处。
答案 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();