He buscado una respuesta en stackoverflow pero no puedo obtener algo relevante.Inicialización de estructura estática con etiquetas en C++
Estoy tratando de inicializar una instancia de estructura estática con los valores iniciales especificando sus etiquetas, pero me da un error en tiempo de compilación:
src/version.cpp:10: error: expected primary-expression before ‘.’ token
Aquí está el código:
// h
typedef struct
{
int lots_of_ints;
/* ... lots of other members */
const char *build_date;
const char *build_version;
} infos;
Y el código defectuoso:
// 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;
}
Así que la idea básica es eludir la inicialización de "otros miembros" y solo establecer los valores relevantes build_date
y build_version
. Esto solía funcionar en C, pero no puedo entender por qué no funcionará en C++.
¿Alguna idea?
edición:
realizo este código es sencillo C, y que en realidad es. Todo el proyecto está en C++, así que tengo que usar extensiones de archivos C++ para evitar el lío de dependencia de archivos make (%.o: %.cpp
)
* ¿Por qué es malo? funciona en C! * Principalmente porque C y C++ son * idiomas * diferentes. –
@David - pero con suficiente en común, y con una derivada originalmente del otro, y con el intercambio continuo de ideas, por lo que estresarse acerca de la confusión es injusto. Algunas partes de C99 ya se han importado a C++ 0x, como "long long". – Steve314
@ Steve314: No me malinterpreten, no estoy estresado por la confusión (no estoy estresado en absoluto), pero no hay confusión en la pregunta: ¡él sabe que son idiomas diferentes! Me resulta interesante cuando la gente dice que debido a que una característica funciona en C it * tiene * que trabajar en C++. Considere esto, o 'void f (int x) {int array [x]; ...} 'Son idiomas diferentes, y si bien comparten un pasado común, no siempre comparten el futuro. –