gpt4 book ai didi

c++ - 声明/初始化私有(private)嵌套结构的静态成员

转载 作者:行者123 更新时间:2023-11-30 03:24:17 24 4
gpt4 key购买 nike

我有这个示例代码(在名为 A.cpp 的文件中):

class O {
private:
struct S {
int i;
int j;
};

static struct S s;
};

O::S s { 0, 1 };

我在 Mac 上的命令行中使用 g++ -c -std=c++11 A.cpp 进行编译,但出现以下错误:

A.cpp:11:4: error: 'S' is a private member of 'O'
O::S s { 0, 1 };
^
A.cpp:3:9: note: declared private here
struct S {
^
1 error generated

问题最初出现在 linux 机器上的更复杂的代码中,具有基本相同的错误。 (在“真实”代码中,类声明在一个文件头中,而不是全部在一个文件中,但同样,错误是相同的。)

这看起来应该可行。当然 S 被声明为私有(private)的,如消息所示,但它仅在私有(private)成员变量 s 的上下文中使用。这里有什么问题,为什么?

编辑:关于在 How to initialize private static members in C++? 中声明的拷贝,明显的区别是内部类的范围,而不是一般如何初始化静态成员变量。

最佳答案

这一行

O::S s { 0, 1 };

尝试定义类型为O::S 的对象::s。它不是静态成员的定义。那个看起来像这样:

O::S O::s { 0, 1 };

关于c++ - 声明/初始化私有(private)嵌套结构的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49805205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com