Qt: champ de type incomplète
Ne peux pas compiler ma classe.
Erreur:
erreur: le champ 'nom de fichier' a incomplète de type
Si je change QString filename
à QString *filename
, l'erreur va.. mais j'ai besoin d'avoir QString filename
.
processus.h:
#ifndef PROCESS_H
#define PROCESS_H
#include <QString>
class Process
{
public:
int pid;
QString filename;
Process(int pid, QString filename);
};
#endif //PROCESS_H
process.cpp:
#include "process.h"
Process::Process(int pid, QString filename)
{
this->pid = pid;
this->filename = filename;
}
Quel est le problème?
Ce code a l'air bien, je pense que le problème doit se situer quelque part d'autre. Êtes-vous sûr que vous pouvez reproduire le problème avec ce code exact?
C'est que l'ensemble de l'en-tête? Si pas, assurez-vous que vous n'avez pas de déclaration anticipée pour QString classe entre le QString l'en-tête et le Processus déclaration de classe.
C'est l'ensemble de l'en-tête. Si je créer empy projet tout fonctionne bien.
Mais dans mon projet il y a beaucoup de fichier, qui utilisent
Dans ce cas Zlatomir est droit. De faire avancer les choses déclare votre classe et à l'avant, y compris l'en-tête. Recherche de votre code "de la classe QString" et de voir si vous pouvez éviter cela.
C'est que l'ensemble de l'en-tête? Si pas, assurez-vous que vous n'avez pas de déclaration anticipée pour QString classe entre le QString l'en-tête et le Processus déclaration de classe.
C'est l'ensemble de l'en-tête. Si je créer empy projet tout fonctionne bien.
Mais dans mon projet il y a beaucoup de fichier, qui utilisent
#include "process.h"
et #include <QString>
.Dans ce cas Zlatomir est droit. De faire avancer les choses déclare votre classe et à l'avant, y compris l'en-tête. Recherche de votre code "de la classe QString" et de voir si vous pouvez éviter cela.
OriginalL'auteur Denis Kildishev | 2013-06-14
Vous devez vous connecter pour publier un commentaire.
Dans mon expérience, lorsque de telles erreurs bizarres, comme cela est apparu sans raison, la plupart du temps, il a été résolu en changeant quelques noms, c'est donc un conflit de nom. (mais la plupart du temps, je ne l'ai toujours pas comprendre où était le conflit).
Je voudrais donc désespérément essayer de changer les noms, dans l'ordre:
PROCESS_H
Process
filename
process.h
etprocess.cpp
(si il y a d'autres dossiers avec le même nom de fichier, ils seront compilés au même endroit si vous utiliser qmake)pid
, parce que vous êtes vraiment désespéré à ce pointUtiliser quelque chose que vous êtes vraiment sûr qu'il ne peut pas être déjà utilisé, comme
MySuperFancyProcess
😉OriginalL'auteur Boris
Problème résolu! Oui, c'était à cause de la classe QString;, pas dans mes fichiers, mais dans certains de QT
OriginalL'auteur Denis Kildishev