10
votes

"Attendu non qualifié-ID avant" Espace de noms "" Erreur

J'ai la pièce de code apparemment apparemment innocous: xxx

qui me donne ce message d'erreur: xxx

Que dois-je faire faux ici?


5 commentaires

Normalement, cela se produit lorsque vous oubliez un ; quelque part ou que vous utilisez quelque chose sans le définir. Êtes-vous sûr que votre fichier d'en-tête semble exactement comme ça?


Une autre possibilité: vous compilez avec un compilateur C plutôt qu'un compilateur C ++ (mais un compilateur C aurait dû se plaindre de ne pas pouvoir trouver ). De toute façon, votre code comme fonctionne pour moi. Je soupçonne donc que RedX a cloué: que vous ne nous avez pas montré le code qui provoque le bogue.


@Redx - Yup qui est le fichier d'en-tête entier que j'ai. Je vais jeter un oeil à la réponse de James pour voir si c'est le problème.


@David Je suis à peu près sûr que j'utilise un compilateur C ++. Je vois qt appeler g ++.


Cela pourrait également être causé si vous essayez de déclarer un espace de noms dans une classe. Découvrez la dure chemin ...


5 Réponses :


1
votes

d'où se trouve ce fichier inclus. Il n'y a rien de mal avec le fichier vous avez posté; Ce que je soupçonne, c'est que le fichier qui inclut Il comprend déjà (donc cela inclut rien), et manque un ; immédiatement avant d'inclure votre fichier.


4 commentaires

Il est inclus dans 3 fichiers différents. Le compilateur ne se plaint que dans le fichier inclus de filepath / vocabword.cpp: 1: , mais pour chaque fichier qui utilise ui.h , l'inclusion est la toute première ligne de le fichier, donc cela ne peut pas être. Toute autre idée?


Fournissez un exemple complet montrant l'erreur. Commencez par décaper votre code jusqu'à ce que vous obtenez quelque chose de suffisamment petit pour poster. Les chances sont bonnes que vous êtes dans le processus découvrirez votre erreur vous-même;)


Peut-être certains paramètres de compilateur différents pour ce fichier .CPP?


@wrongUsername Si le compilateur ne se plaint que pour l'un des fichiers incluant ui.h , le problème est évidemment dans ce fichier. (Peut-être que certains caractères étrangers que votre éditeur ne s'affichent pas?) Sinon: Pourriez-vous avoir un fichier nommé String quelque part dans votre chemin Inclure, avant le système String ?



1
votes

Eh bien, c'est bizarre. A quelque chose d'autre #defined ui_h (qui ne devrait pas causer de problème mais qui sait), ou interface utilisateur?

Est-ce que la même chose se passe avec un #pragma une fois (en supposant que votre compilateur supporte-le)?

Avez-vous littéralement jumelé le fichier afin que tous les autres code soient commentés?

(excuses pour avoir publié plus de questions plutôt que de réponses)


1 commentaires

Merci pour la réponse de la waffle! Malheureusement, en utilisant Pragma donnant une seule fois le même résultat, et j'ai renommé ui_h à userinterface_h au cas où QT a déjà défini ui_h. Aucune aide. J'ai commenté le fichier qt plaint à propos, QT vient de commencer à se plaindre d'un autre dossier. Va essayer de chasser encore cela.



24
votes

Un moyen de suivre de telles erreurs est de commencer à partir de la masse supérieure:

testmain.cpp:4:2: error: expected ';' after struct


1 commentaires

Woah, c'était exactement ce que le problème était. Merci beaucoup David!



1
votes

Je suis arrivé ici d'une recherche Google. Si quiconque atterrit sur cette page en raison de la même erreur, vous pouvez également obtenir cette erreur si vous essayez de définir un alias d'espace de noms à la portée de la classe.

Exemple: P>

namespace SomeLongNamespaceName { }
class SomeClass {
    namespace X = SomeLongNamespaceName; // This is illegal and will give the
                                         // compiler error from this question
};


0 commentaires

-1
votes

"nom" dans mon cas était une erreur. Attendu: non qualifié-id avant 'Espace de noms' Espace de noms dans une déclaration de classe dans l'un des en-têtes en haut du fichier. J'ai donc besoin d'ajouter des points-virgules supplémentaires après le dernier '}' . Ainsi tel que '} ;;;;' fera.


0 commentaires