C++ erreur: primary-expression before ‘.’ token
J'ai regardé les questions antérieures, mais encore je n'étais pas satisfait, donc je vous poste ça.
J'ai essayé de compiler le code C++ écrit par quelqu'un d'autre.
/*
file1.h
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
struct
{
unsigned member1;
unsigned member2;
} str1;
struct
{
unsigned member3;
unsigned member4;
} str2;
struct
{
unsigned member5;
unsigned member6;
} str3;
} CONFIG_T;
/*
file1.c
*/
CONFIG_T cfg =
{
.str1 = { 0x01, 0x02 },
.str2 = { 0x03, 0x04 },
.str3 = { 0x05, 0x06 }
};
Compilé avec std C++11 et je reçois l'erreur ci-dessous. Pourquoi le". " a été utilisé dans le code
lors de l'attribution des valeurs ?
home $$ g++ -c -std=gnu++0x initialze_list.cpp
initialze_list.cpp:34: error: expected primary-expression before ‘.’ token
initialze_list.cpp:35: error: expected primary-expression before ‘.’ token
initialze_list.cpp:36: error: expected primary-expression before ‘.’ token
Je n'étais pas en mesure de comprendre la raison de l'erreur. S'il vous plaît aider.
les lignes qui sont au nombre de 34,35,36?
Vous avez reçu le code en C, pas du C++ code. Essayez un compilateur C.
Vous n'êtes pas la première personne à avoir ce problème: stackoverflow.com/q/855996/1025391
Vous avez reçu le code en C, pas du C++ code. Essayez un compilateur C.
Vous n'êtes pas la première personne à avoir ce problème: stackoverflow.com/q/855996/1025391
OriginalL'auteur Ashoka K | 2012-07-09
Vous devez vous connecter pour publier un commentaire.
Ce que vous avez posté est le code en C, pas du C++ code (notez le .c fichier de l'extension). Toutefois, le code suivant:
devrait fonctionner correctement.
Vous pouvez également lire les propos de C++11 initialiser les listes de wiki.
Mais mon exigence est que j'ai compiler le code source C++ pour ARMv7 des processeurs embarqués. Depuis d'autres fichiers ont été compilés avec C++ options que j'ai compiler le code mentionné ci-dessus également en C++. Il fonctionne avec le Compilateur C, mais je veux qu'il compile en C++ 🙁
si vous ne pouvez pas changer le code?
Oui, je ne peux pas modifier le code. Le code ci-dessus est la copie exacte avec les membres de l'/structure noms ont été changés. Merci de m'aider à compiler le code source en C++. Le exacte de la Compilation de commande que j'utilise est : $ /bin/arm-none-linux-gnueabi-c++ -O3-std=gnu++0x -mars=armv7-a-mtune=cortex-a8 -mfpu=neon -ffast-math fichier.c
N'est-il pas de la compilation en C++? Même si c'est écrit comme code C, il semble que ça devrait compiler fine comme du C++ (sauf pour les lignes qui ont été à l'origine d'une erreur, mais je n'avais jamais écris qu'en C), mais vous pouvez obtenir des avertissements au sujet de vos noms d'en-tête désapprouvée.
OriginalL'auteur SingerOfTheFall
Désigné globale des initialiseurs est un C99 fonction, c'est à dire qu'il est une fonction de C langue. Il n'est pas présent en C++.
Si vous insistez sur le compiler en C++, vous devrez réécrire l'initialisation de
cfg
.OriginalL'auteur AnT
Que le code est à l'aide d'un C99 fonctionnalité appelée désigné initialiseurs. Comme vous l'avez observé, cette fonctionnalité n'est pas disponible en C++ et C++11.
Comme suggéré dans cette réponse vous devez utiliser un compilateur C pour du code C. Vous pouvez toujours faire le lien avec votre application C++. Vous pouvez utiliser
cmake
à faire la configuration de build pour vous. Un exemple simple:il suffit d'exécuter
mkdir build; cd build; cmake ..; make
à partir de votre répertoire source.OriginalL'auteur moooeeeep
Merci à tous ...
Après toutes les analyses que j'ai trouvé que le code ci-dessus a C99 fonctionnalité appelée
Désigné initialiseur.
Pour compiler ce code en C++, j'ai changé le code à la normale de l'initialisation comme ci-dessous.
==========================
==================================
Ce code compilé correctement sans erreur en C++.
$$ g++ -c initialze_list.cpp
$$ g++ -c -std=gnu++0x initialze_list.cpp
OriginalL'auteur Ashoka K