Le pointeur vers le type de classe incomplet n’est pas autorisé

Pour une raison quelconque, je ne peux pas utiliser les fonctions attachées à l’object que je veux utiliser. J’ai ajouté un commentaire à la ligne qui ne fonctionne pas. En tant qu’erreur, j’obtiens “Erreur; le pointeur vers le type de classe incomplet n’est pas autorisé”

Ceci est le code dans dokter.ccp

int counter = 0; for (list::iterator it = wielrenners.begin(); it != wielrenners.end(); it++){ Wielrenner* wielrennerOB = *it; cout << "\nID: " << counter; cout << "List size: " << persons.size() <print(); // This is not working counter++; } 

Ceci est le code dans wielrenner.h

 #ifndef WIELRENNER_H_ #define WIELRENNER_H_ //#include  #include "persoon.h" #include "Onderzoek.h" class Wielrenner : public Persoon { public: Wielrenner(ssortingng, ssortingng, Adres, ssortingng, Datum, Datum, ssortingng, int, float, float, float,list* ); ~Wielrenner(void); int getLengte() const; float getGewicht() const; float getVo2max() const; float getMaxVermogen() const; list getOnderzoekenList(); void setLengte(int); void setGewicht(float); void setVo2max(float); void setMaxVermogen(float); void voegOnderzoekToeList(Onderzoek); void showOnderzoeksList(); void setOnderzoeksLijst(list&); void print(); void printFile(ofstream&); private: int lengte; float gewicht; float vo2max; float maxVermogen; list onderzoeken; }; #endif /* WIELRENNER_H_ */ 

code dans wielrenner.CCP

 using namespace std; #include  #include "Wielrenner.h" /* #include "Onderzoek.h" */ Wielrenner::Wielrenner(ssortingng voornaam, ssortingng achternaam, Adres adres, ssortingng telefoon, Datum datumInDienst, Datum geboorteDatum, ssortingng persoonType, int lengte, float gewicht, float vo2max, float maxVermogen,list* onderzoeken) : lengte(lengte), gewicht(gewicht), vo2max(vo2max), maxVermogen(maxVermogen), Persoon(voornaam, achternaam, adres, telefoon, datumInDienst, geboorteDatum, persoonType) { } Wielrenner::~Wielrenner(void) { } //setten van gegevens void Wielrenner::setLengte(int newLengte){ lengte = newLengte; } void Wielrenner::setGewicht(float newGewicht){ gewicht = newGewicht; } void Wielrenner::setVo2max(float newVo2max){ vo2max = newVo2max; } void Wielrenner::setMaxVermogen(float newMaxVermogen){ maxVermogen = newMaxVermogen; } void Wielrenner::voegOnderzoekToeList(Onderzoek newOnderzoek){ onderzoeken.push_back(newOnderzoek); } void Wielrenner::showOnderzoeksList(){ int teller=0; for (list::iterator it = onderzoeken.begin(); it != onderzoeken.end(); it++){ Onderzoek onderzoekOB = *it; cout << teller << " - "; onderzoekOB.print(); teller++; } } void Wielrenner::setOnderzoeksLijst(list& newOnderzoeksLijst){ onderzoeken = newOnderzoeksLijst; } void Wielrenner::print(){ cout << "(" << persoonID << ") Persoon: " << endl; cout << persoonType << endl; cout << voornaam << " " << achternaam << endl; adres.print(); cout << telefoon << endl; cout << "Datum in dienst: "; datumInDienst.print(); cout << "Geboortedatum: "; geboorteDatum.print(); cout < Extra wielrenner gegevens: " << endl; cout << "Lengte: " << lengte << endl; cout << "Gewicht: " << gewicht << endl; cout << "vo2max: " << vo2max << endl; cout << "maxVermogen: " << maxVermogen << endl; } void Wielrenner::printFile(ofstream &myfile){ myfile << persoonID << "\n"; myfile << persoonType << "\n"; myfile << voornaam << " " << achternaam << "\n"; adres.printFile(myfile); myfile << telefoon << "\n"; datumInDienst.printFile(myfile); geboorteDatum.printFile(myfile); myfile << lengte << "\n"; myfile << gewicht << "\n"; myfile << vo2max << "\n"; myfile << maxVermogen << "\n"; } // returnen van gegevens int Wielrenner::getLengte() const{ return lengte; } float Wielrenner::getGewicht() const{ return gewicht; } float Wielrenner::getVo2max() const{ return vo2max; } float Wielrenner::getMaxVermogen() const{ return maxVermogen; } list Wielrenner::getOnderzoekenList(){ return onderzoeken; } 

Une “classe incomplète” est une classe déclarée mais non définie. Par exemple

 class Wielrenner; 

par opposition à

 class Wielrenner { /* class members */ }; 

Vous devez #include "wielrenner.h" dans dokter.ccp

Une chose à vérifier …

Si votre classe est définie en tant que typedef:

 typedef struct myclass { }; 

Ensuite, vous essayez de vous référer à struct myclass n’importe où ailleurs, vous obtiendrez des erreurs de type incomplet à gauche et à droite. C’est parfois une erreur d’oublier que la classe / structure était typée. Si tel est le cas, supprimez “struct” de:

 typedef struct mystruct {}... struct mystruct *myvar = value; 

Au lieu d’utiliser …

 mystruct *myvar = value; 

Erreur commune.

Vous obtenez cette erreur lorsque vous déclarez une référence de transfert dans le mauvais espace de noms, déclarant ainsi un nouveau type sans le définir. Par exemple:

 namespace X { namespace Y { class A; void func(A* a) { ... } // incomplete type here! } } 

… mais en classe A a été défini comme ceci:

 namespace X { class A { ... }; } 

Ainsi, A était défini comme X::A , mais je l’utilisais comme X::Y::A

La solution est évidemment de déplacer la référence vers l’endroit comme suit:

 namespace X { class A; namespace Y { void func(X::A* a) { ... } // Now accurately referencing the class`enter code here` } } 

Je suis tombé sur le même problème et l’ai résolu en vérifiant mes #includes. Si vous utilisez QKeyEvent, vous devez vous assurer de l’inclure également.

J’ai eu une classe comme celle-ci et mon erreur est apparue lorsque je travaillais avec “event” dans le fichier .cpp.

myfile.h

  #include  // adding this import solved the problem. class MyClass : public QWidget { Q_OBJECT public: MyClass(QWidget* parent = 0); virtual ~QmitkHelpOverlay(); protected: virtual void keyPressEvent(QKeyEvent* event); };