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

How to initialize static constant member using function

本文关键字:常量 成员 静态 初始化 何使用 函数      更新时间:2023-10-16

在一个非常简化的情况下,我有以下设置,其中,我只想从类 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

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

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

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;

您将getInstance用作静态函数,但它未声明为static

更改getInstance声明:

static A & getInstance() { return instance; }