2017-04-21 65 views
5

Ten kod służy tylko do przetestowania mojej wiedzy na temat dostępu do tablicy struktur. Kiedy wykonałem ten kod, daje mi to dwa różne inicjały dla param. Pomóż mi zrozumieć błąd i rozwiązać ten problem. Próbowałem ponownie użyć kodu, który został już przez kogoś rozwiązany. Moje pytanie dotyczące wypełnienia Struct parametrami Param_u paramZbyt wiele inicjuje dla tablicy struktury Unii

#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: funkcja 'int main()': prog.cpp: 28: 5: Błąd: Zbyt wiele inicjalizatory 'Param_u' }; – TestEngineer

+0

clang również daje błąd. Zobacz prezentację na żywo [tutaj] (http://rextester.com/PNAALV26498). Którą wersję klangu używasz? – Destructor

+0

Standardowy C++ nie ma wyznaczonych inicjalizatorów –

Odpowiedz

0

To nie jest standardowe C++. Używasz anonimowych struct & wyznaczonych inicjalizatorów (funkcja C99). C++ tego nie obsługuje. Włącz opcję -pedantic-errors na kanale ++ & g++. Aby uzyskać więcej informacji, zobacz pytanie this. Używasz rozszerzeń specyficznych dla kompilatora, aby Twój program nie był przenośny.

Zobacz prezentację na żywo here.

clang++ daje następujące Diagnostyka:

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.