首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用函数初始化静态常量成员

如何使用函数初始化静态常量成员
EN

Stack Overflow用户
提问于 2012-05-31 17:48:07
回答 2查看 2.1K关注 0票数 2

在一个非常简单的情况下,我有以下设置,我只是想从类A的函数(单例和实例与这个问题无关)初始化一个常量静态成员(类foo):

代码语言:javascript
复制
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。但它会生成以下错误:

代码语言:javascript
复制
$ 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

你能帮帮我吗?会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-31 17:52:08

代码中有几个问题,但这里有一个完整的可编译示例:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2012-05-31 17:50:13

您正在使用getInstance作为静态函数,但它并未声明为static

更改getInstance的声明

代码语言:javascript
复制
static A & getInstance() { return instance; }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10831181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档