【问题标题】:C++17 inline static member class variable error with GCC [duplicate]GCC的C ++ 17内联静态成员类变量错误[重复]
【发布时间】:2021-04-04 19:20:39
【问题描述】:

给定这个测试片段:

class Member
{
};

class MemberNoDefault
{
public:
    MemberNoDefault(int x) {}
};

class Owner
{
    inline static Member member1;
    inline static Member member2();
    inline static MemberNoDefault member3(10);
    static MemberNoDefault member4;
};

MemberNoDefault Owner::member4(10);

使用 GCC 9.3 编译时失败,member3 尝试使用带有参数的构造函数。错误是:

error: expected identifier before numeric constant
error: expected ',' or '...' before numeric constant

这不应该吗?如果我用member3 注释掉该行,则编译成功。

【问题讨论】:

  • 注意这个约束与变量是inline还是static无关。

标签: c++ gcc c++17


【解决方案1】:

不,这不是在类定义中初始化成员的有效方法。

您必须使用大括号初始化,或(如果有效)=

inline static MemberNoDefault member3a{10};
inline static MemberNoDefault member3b = 10;

在此示例中,聚合初始化也适用于您:

inline static MemberNoDefault member3c = {10};

这是因为括号版本的初始化很容易与函数声明(例如您的member2 实际上是一个函数)和they didn't want to make that mistake again 混淆。尽管就我个人而言,我认为添加这种不一致只会让情况变得更糟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-17
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多