【问题标题】:too many initializes for Union Structure array联合结构数组的初始化太多
【发布时间】:2017-09-17 20:46:18
【问题描述】:

这段代码只是为了测试我对结构数组访问的了解。当我执行这段代码时,它给了我两个为参数初始化的错误。请帮助我了解错误并解决此问题。 我试图重用已经被某人解决的代码。我关于用参数 Param_u 参数填充结构的问题

#include <iostream>
#include <stdio.h>
#include <string.h>


#define ARRAY_COUNT(arr) (sizeof (arr) / sizeof *(arr))

typedef union {
    struct {    // Function parameters
        int *array;
        size_t size;
    };
    struct {    // Function return value
        float mean;
        int Median;
    };
} Param_u;

int main() {
    int array_1[] = {1, 2, 3, 4, 5};
    int  ret1, ret2;

    // Fill the Struct with parameters
    Param_u param = {
        .array = array_1,
        .size = ARRAY_COUNT(array_1),
    };
    return 0;
}

【问题讨论】:

  • prog.cpp: In function 'int main()': prog.cpp:28:5: error: too many initializers for 'Param_u' };
  • clang 也会出错。见现场演示here。您使用的是哪个版本的 clang?
  • 标准 C++ 没有指定的初始化器
  • @TestEngineer:您正在使用哪个 C++ 编译器并告诉我们该编译器的版本?
  • @WorldSEnder:在 Godbolt 上使用 -pedantic-errors 选项,然后编译会失败!!!

标签: c++ pointers structure


【解决方案1】:

这不是标准的 C++。您正在使用匿名 struct 和指定的初始化程序(C99 功能)。 C++ 不支持这一点。在 clang++ 和 g++ 上启用 -pedantic-errors 选项。有关更多详细信息,请参阅this 问题。您正在使用编译器特定的扩展,因此您的程序不可移植。

观看现场演示here

clang++ 给出以下诊断:

Error(s):

source_file.cpp:12:5: error: anonymous structs are a GNU extension [-Werror,-Wgnu-anonymous-struct]
    struct {    // Function parameters
    ^
source_file.cpp:16:5: error: anonymous structs are a GNU extension [-Werror,-Wgnu-anonymous-struct]
    struct {    // Function return value
    ^
source_file.cpp:28:9: error: designated initializers are a C99 feature [-Werror,-Wc99-extensions]
        .array = array_1,
        ^~~~~~~~~~~~~~~~
source_file.cpp:29:9: error: designated initializers are a C99 feature [-Werror,-Wc99-extensions]
        .size = ARRAY_COUNT(array_1),
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
source_file.cpp:24:16: warning: unused variable 'ret2' [-Wunused-variable]
    int  ret1, ret2;
               ^
source_file.cpp:27:13: warning: unused variable 'param' [-Wunused-variable]
    Param_u param = {
            ^
source_file.cpp:24:10: warning: unused variable 'ret1' [-Wunused-variable]
    int  ret1, ret2;
         ^
3 warnings and 4 errors generated.

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2021-06-03
    • 2021-04-09
    • 2022-08-15
    • 2020-12-01
    相关资源
    最近更新 更多