在一个非常简单的情况下,我有以下设置,我只是想从类A的函数(单例和实例与这个问题无关)初始化一个常量静态成员(类foo):
class A
{
public:
static A instance;
A & getInstance() { return instance; }
int i(){ return 10;}
int j(){ return 20;}
};
class foo {
public:
static const int ii = A::getInstance().i() * A::getInstance().j();
};
const int foo::ii;
int main()
{
foo f;
return 1;
}目的是使用上面的一些函数来初始化成员ii。但它会生成以下错误:
$ c++ static_constant.cpp
static_constant.cpp:14:30: error: ‘A::getInstance()’ cannot appear in a constant-expression
static_constant.cpp:14:42: error: a function call cannot appear in a constant-expression
static_constant.cpp:14:44: error: ‘.’ cannot appear in a constant-expression
static_constant.cpp:14:46: error: a function call cannot appear in a constant-expression
static_constant.cpp:14:53: error: ‘A::getInstance()’ cannot appear in a constant-expression
static_constant.cpp:14:65: error: a function call cannot appear in a constant-expression
static_constant.cpp:14:67: error: ‘.’ cannot appear in a constant-expression
static_constant.cpp:14:69: error: a function call cannot appear in a constant-expression你能帮帮我吗?会很感激的。
发布于 2012-05-31 17:52:08
代码中有几个问题,但这里有一个完整的可编译示例:
class A
{
public:
static A instance;
static A & getInstance() { return instance; }
int i(){ return 10;}
int j(){ return 20;}
};
class foo {
public:
static const int ii;
};
const int foo::ii = A::getInstance().i() * A::getInstance().j();
A A::instance;发布于 2012-05-31 17:50:13
您正在使用getInstance作为静态函数,但它并未声明为static。
更改getInstance的声明
static A & getInstance() { return instance; }https://stackoverflow.com/questions/10831181
复制相似问题