9
votes

QT Creator: "XYZ ne nomme pas de type"

Ceci est un message d'erreur très frustrant dans QT Creator: 'xyz' ne nomme pas de type . Cela signifie généralement qu'il existe une erreur dans la classe xyz qui empêche le compilateur de générer le type, mais il n'y a pas de conseils supplémentaires quant à ce qui s'est mal passé.

Toute suggestion?


2 commentaires

Pouvez-vous nous montrer la ligne qui provoque l'erreur?


Ressemble à un bogue dans QT Creator. C'est toujours là en 2.01. Mon programme compile et fonctionne bien, mais je reçois un tas d'avertissements de types apparemment aléatoires. Même certains types QT (comme QScriptValue).


11 Réponses :


0
votes

est-ce que # inclut l'aide du fichier d'en-tête correspondant?


3 commentaires

Non, je me suis assuré que je l'ai inclus.


Pourriez-vous s'il vous plaît poster un exemple complet qui est autonome pour que nous puissions réellement regarder quelque chose? Peut battre deviner :)


Je ne sais pas quoi chercher ... Cela se passe dans un projet avec 100 fichiers.



0
votes

Si vous utilisez des modèles, vous devez précéder le nom de la classe avec "typename" afin que le compilateur puisse la reconnaître comme un type ...

template <typename t> //...


0 commentaires

2
votes

Obtenez-vous l'erreur du compilateur ou de l'IDE (sous forme de soulignement rigide)? J'ai rencontré cela dans Qt Creator 1.2.9 et je pense que c'est un bug dans l'IDE.


0 commentaires

2
votes

Je pense que vous déclarez que vous déclarez quelque chose de type xyz tel que xxx

le problème est XYZ n'est pas encore défini.

Ce qui suit est mon problème et ma conclusion. Que pensez-vous?

Mon problème est que j'ai une classe ABC et une classe XYZ. La classe ABC a un membre qui est déclaré comme un type XYZ. La classe XYZ a un membre qui est déclaré comme type ABC. Le compilateur ne sait pas ce que le type XYZ est encore parce qu'il ne l'a pas encore défini. Par conséquent, l'erreur donnée est "xyz" ne nomment pas de type.

code d'exemple: xxx


0 commentaires

3
votes

dans votre abc.cpp Assurez-vous d'inclure xyz.h avant y compris abc.h . .

Aucune idée pourquoi échanger les deux autour ferait une différence, mais cela m'a fait pour moi.


0 commentaires

0
votes

Deux possibilités se produisent pour moi:
1. Vous avez peut-être une fente au lieu de signaler dans un appel de connexion (). 2. Parfois, il aide à modifier gratuitement le fichier .pro (par exemple, insert et supprimer un espace), de sorte que QMake est exécuté et que les fichiers .MOC sont générés.


0 commentaires

1
votes

Dans un projet de QT récent, où je venais d'installer le plus récent Qt (3/2011), j'ai guéri les trois d'entre eux qui arrêtaient ma construction en ajoutant ceci ... XXX < p> ... avant l'inclusion du fichier d'en-tête qui jetait les erreurs. Cela l'a fait.

Je ne sais pas pourquoi ils distribueraient quelque chose qui avait de tels problèmes, peut-être dans d'autres types de systèmes.h est inclus dans quelque chose d'autre, mais pas dans mon cas, de toute façon. Espère que cela aide quelqu'un.


0 commentaires

5
votes

Je viens d'avoir ce problème et j'aime Arckaroph a dit: Le problème est que lorsque nous incluons un fichier d'en-tête dans un fichier de code source et que nous en utilisons la directive #IfnDef, nous ne pouvons plus l'inclure dans un fichier d'en-tête pour donner un type de classe incluse à une variable de source Fichier de code

Exemple:

classe1.h contient la classe1 classe2.h contient la classe2 La classe2 a une variable privée V avec type de classe1 Si nous incluons la classe1.h en classe2. CPP Nous ne pouvons pas l'inclure dans la classe2.h de donner V un type de classe1.

donc nous mettons dans la classe2.cpps class2.h avant la classe1.h ou nous supprimons la classe1.h de class2.cpp


0 commentaires

4
votes

J'ai trouvé ce problème sur QtCreator 3.4.1 et Qt 5.4, lorsque je remplace telle que xxx

avec xxx

Ce problème parti.


0 commentaires

0
votes

Dans mon cas, je n'utilisais pas l'espace de noms que la classe a été définie. Les contenus de l'en-tête ont été contenus dans l'espace de noms, mais le fichier source manquait le à l'aide de la directive directive.

.h : xxx

.cpp : xxx


0 commentaires

1
votes

J'ai trouvé une solution pour moi-même. Dis que j'ai la classe A et la classe B. "A.H" comprend "B.H" et a une instance de B en tant que membre. "B.H" comprend "A.H" et a une instance d'un membre. Compiler me donne une erreur dans "BH" sur la ligne de code où membre de la classe A est déclaré: xxx

ce que je fais est dans "ah" je supprimais #include "bh" et placez # Inclure "BH" à "A.CPP". Et avant une déclaration de classe, j'écris la classe B; xxx

a travaillé pour moi, bonne chance!


0 commentaires