c++ - 不支持非平凡的指定初始化器

标签 c++ initialization

我的结构如下:

struct app_data
{
    int port;
    int ib_port;
    unsigned size;
    int tx_depth;
    int sockfd;
    char *servername;
    struct ib_connection local_connection;
    struct ib_connection *remote_connection;
    struct ibv_device *ib_dev;

};

当我尝试这样初始化它时:

struct app_data data =
{
    .port = 18515,
    .ib_port = 1,
    .size = 65536,
    .tx_depth = 100,
    .sockfd = -1,
    .servername = NULL,
    .remote_connection = NULL,
    .ib_dev = NULL
};

我收到此错误:

sorry, unimplemented: non-trivial designated initializers not supported

我认为它希望初始化的顺序与声明的完全一致,并且缺少 local_connection。不过我不需要初始化它,设置为 NULL 是行不通的。

如果我将其更改为 g++,仍然会出现相同的错误:

struct app_data data =
{
    port : 18515,
    ib_port : 1,
    size : 65536,
    tx_depth : 100,
    sockfd : -1,
    servername : NULL,
    remote_connection : NULL,
    ib_dev : NULL
};

最佳答案

初始化的顺序需要与声明的顺序一致。

typedef struct FOO
{
    int a;
    int b;
    int c;
}FOO;

FOO foo   = {.a = 1, .b = 2}; // OK
FOO foo1  = {.a = 1};         // OK
FOO foo2  = {.b = 2, .a = 1}; // Error sorry, unimplemented: non-trivial designated initializers not supported
FOO foo3  = {.a = 1, .c = 2}; // Error sorry, unimplemented: non-trivial designated initializers not supported

我了解这意味着编译器不支持面向名称的无序成员初始化。

需要以老式方式初始化结构。为了清楚起见,我保留了变量名称,但我必须按顺序初始化它们,而不是跳过变量。

我可以在任何变量处停止初始化,但不能初始化由此产生的变量。

关于c++ - 不支持非平凡的指定初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215971/

相关文章:

c++ - 如何存储指向将 Callable 对象作为其参数之一的函数模板的指针

初始化静态成员的 C++ 设计,任何时候都需要

c++ - 用另一个和额外元素的内容初始化 C++ (11) std::vector

opencv - 使用OpenCV将多维矩阵初始化为多维矩阵会产生链接错误

c - 将 native 数据类型初始化为 "zero"的一般操作

c++ - 为什么成员变量在 C++ 构造函数初始化列表中可见?

c++ - 让用户输入直到他们输入 X

c++ - 该公式在 "accumulate"中采用哪些参数?

c++ - 为什么我需要 -fPIC 来使用 --unresolved-symbols=ignore-in-object-files 进行编译?

iOS 使用 init 来初始化我所有的值