2013-01-14 17 views
9

CDT parser zgłasza błąd składni dla inicjalizacji struktury:C++ GNU wyznaczona struktura inicjalizacji nie ujęte w Eclipse

typedef struct MyStruct 
{ 
    int a; 
    float b; 
}; 

int main(void) 
{ 
    // GNU C extension format 
    MyStruct s = {a : 1, b : 2}; 
    // C99 standard format 
// MyStruct s = {.a = 1, .b = 2}; 

    return 0; 
} 

Podczas GCC lists the : form as obsolete, wydaje się, że nie została zaniechana ani usunięte. W C99 z pewnością korzystałbym ze standardowego formularza .<name> =, ale dla C++, : jest jedyną opcją, o której wiem, ze względu na wyznaczoną inicjalizację.

Próbowałem ustawić moje toolchain zarówno MinGW i Cross GCC, ale nie wydają się działać.

Jak mogę sprawić, aby Eclipse rozpoznał tę składnię? To nie jest wielka sprawa dla jednej linii, ale przenosi się do każdej innej instancji zmiennej, ponieważ Eclipse nie zdaje sobie sprawy, że jest zadeklarowana.

+0

Dla jasności, twoim celem jest zrozumienie tej składni przez narzędzia IDE (takie jak podświetlanie składni). – Yakk

+0

Analizator składni CDT nie jest powiązany z łańcuchem narzędzi. Rozpoznaje wiele rozszerzeń GCC, prawdopodobnie nie tych oznaczonych jako przestarzałe. –

+0

Tak, mam nadzieję, że ktoś jest świadomy ustawienia, które może mieć błąd, który mógłby spowodować, że Eclipse to rozpozna. Pomyślałem, że być może toolchain to zrobi, ponieważ nie byłoby sensu rozpoznawać rozszerzenia GNU, gdy używa się kompilatora innego niż GNU. – altendky

Odpowiedz

2

Formularz . jest dostępny tylko w C99 i nie ma żadnego smaku C++. W C++ jedynymi opcjami zgodnymi ze standardami są inicjowana kolejność lub konstruktorzy.

Ty może użycie łączenia z odpowiednim odniesieniem powrocie metod, aby stworzyć podobny interfejs (tu A i B są metody zamiast zmiennych):

MyStruct s; 
s.a(1).b(2); 
+0

W moim przypadku definicja struktury znajduje się w innym projekcie, który jest czystym C. Naprawdę nie znam historii, ale używamy szkieletu testowego C++ dla naszego kodu C. Dzięki za sugestię. – altendky

1

spotkam to problemy zbyt i używam poniżej metody rozwiązać.

MyStruct s = { 
1, 
2, 
} 

Wymaga to programisty w celu zapewnienia sekwencji inicjalizacji.

+0

Wyraźnie brakuje punktu jego pytania ... – Cinch