Statische Struktur-Initialisierung mit Variablen in C++

Ich gesucht habe stackoverflow für eine Antwort, aber ich kann nicht etwas relevant.

Ich versuche zu initialisieren einer statischen Struktur-Instanz mit der ursprünglichen Werte durch die Angabe der tags, aber ich bekomme eine Fehlermeldung bei der Kompilierung:

src/version.cpp:10: error: expected primary-expression before ‘.’ token

Hier der code:

//h
typedef struct
{
    int lots_of_ints;
    /* ... lots of other members */
    const char *build_date;
    const char *build_version;
} infos;

Und der fehlerhafte code:

//C

static const char *version_date = VERSION_DATE;
static const char *version_rev  = VERSION_REVISION;

static const infos s_infos =
{
   .build_date    = version_date, //why is this wrong? it works in C!
   .build_version = version_rev
};

const infos *get_info()
{
    return &s_infos;
}

So die grundlegende Idee ist, zu umgehen, die "andere Mitglieder" - Initialisierung und nur die relevanten build_date und build_version Werte.
Dies funktionierte in C, aber ich kann nicht herausfinden, warum funktioniert es nicht in C++.

Irgendwelche Ideen?

Bearbeiten:

Ich erkennen, dass dieser code sieht aus wie einfaches C, und es ist wirklich so. Das ganze Projekt ist in C++ so habe ich die C++ - Datei-Erweiterungen zu verhindern, dass das makefile Abhängigkeit Chaos ( %.o: %.cpp )

  • Warum ist das falsch? es funktioniert in C! Vor allem, weil C und C++ sind unterschiedliche Sprachen.
  • aber mit genug Gemeinsamkeiten, und mit einem abgeleiteten Zitat aus dem anderen, und mit weiteren Ideen, so dass immer betont, über die Verwirrung ist unfair. Einige Teile von C99 bereits importiert wurden in C++0x", z.B. "long long".
  • Versteh mich nicht falsch, ich bin nicht immer betont, auf die Verwirrung (ich bin nicht immer betont), aber es gibt keine Verwirrung in der Frage: er weiß, dass Sie in verschiedenen Sprachen! Ich finde es interessant, wenn Leute sagen, dass da eine Funktion in C, es ist C++. Betrachten Sie diese, oder void f( int x ) { int array[x]; ...} Sie verschiedene Sprachen, und während Sie teilen eine gemeinsame Vergangenheit, die Sie nicht immer teilen die Zukunft.
  • Ich bekomme Ihren Punkt, und ich völlig verstehen, die Tatsache, dass Sie verschiedene Sprachen. Was ist, wenn ich etwas so trivial wäre, implementiert in C++ als auch. Dies ist, soweit ich weiß, ein sehr eleganter Weg, um das setup der statischen Strukturen. Auf der anderen Seite, ich Stimme auch zu, dass es nicht ein sehr "C++" Art und Weise der Verwendung von Strukturen: ich soll über einen Konstruktor verfügen.
InformationsquelleAutor Gui13 | 2011-04-26
Schreibe einen Kommentar