2013-01-14 10 views
9

Der CDT-Parser meldet einen Syntaxfehler für die Struktur der Initialisierung:C++ GNU bezeichnete Struktur Initialisierung nicht in Eclipse erkannt

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; 
} 

Während GCC lists the : form as obsolete, so scheint es, dass es veraltet wurde nicht noch entfernt. In C99 würde ich sicherlich das Standardformat .<name> = verwenden, aber für C++ ist die : die einzige Option, die mir für die vorgesehene Initialisierung bekannt ist.

Ich habe versucht, meine Toolchain auf MinGW und Cross GCC einzustellen, aber keiner scheint zu funktionieren.

Wie kann ich Eclipse dazu bringen, diese Syntax zu erkennen? Es ist keine große Sache für eine Zeile, aber es führt zu jeder anderen Instanz der Variablen, da Eclipse nicht erkennt, dass es deklariert ist.

+0

Um klar zu sein, ist Ihr Ziel für Ihre IDE-Tools (wie Syntax-Highlighting), diese Syntax zu verstehen? – Yakk

+0

Der CDT-Parser hat nichts mit der Toolchain zu tun. Es erkennt eine Reihe von GCC-Erweiterungen, die wahrscheinlich nicht als veraltet markiert sind. –

+0

Ja, ich hoffe, jemand ist sich einer Einstellung bewusst, die ich falsch haben könnte, die Eclipse auslösen würde, um dies zu erkennen. Ich dachte, dass die Toolchain dies vielleicht tun würde, da es nicht viel Sinn macht, GNU-Erweiterungen zu erkennen, wenn ein Nicht-GNU-Compiler verwendet wird. – altendky

Antwort

2

Das Formular . ist nur in C99 verfügbar und nicht in irgendeiner Form von C++. In C++ sind die einzigen standardkonformen Optionen Initialisierungs- oder Konstruktorreihenfolge.

Sie können Verwendung mit geeigneten Referenzverkettungsverfahren zurückkehr eine ähnliche Schnittstelle zu schaffen (hier a und b sind Methoden eher als Variablen):

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

In meinem Fall ist die Strukturdefinition in einem anderen Projekt, das pure C ist. Ich kenne die Geschichte nicht wirklich, aber wir verwenden ein C++ - Testframework für unseren C-Code. Danke für den Vorschlag. – altendky

1

Ich treffe diese Probleme zu und ich verwende unten Methode löse es.

MyStruct s = { 
1, 
2, 
} 

Dies erfordert Programmierer, um die Reihenfolge der Initialisierung zu gewährleisten.

+0

Sie vermissen eindeutig den Punkt seiner Frage ... – Cinch