2017-04-21 47 views
5

此代碼僅用於測試我對結構數組訪問的知識。當我執行這段代碼時,它給了我很多初始化參數的錯誤。請幫助我瞭解錯誤並修復此問題。 我試圖重複使用已經由某人解決的代碼。我的問題關於用參數填充結構參數Param聯盟結構數組初始化過多

#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; 
} 
+0

prog.cpp:在函數 '詮釋主()': prog.cpp:28:5:錯誤:太多初始化爲 'Param_u' }; – TestEngineer

+0

鐺也給出了一個錯誤。觀看現場演示[這裏](http://rextester.com/PNAALV26498)。你正在使用哪個版本的叮噹聲? – Destructor

+0

標準C++沒有指定的初始化程序 –

回答

0

這不是標準的C++。您正在使用匿名的指定初始值設定項(C99功能)struct &。 C++不支持。啓用-pedantic-errors選項在鐺++ & g++。有關更多詳細信息,請參見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.