Aanwijzer naar onvolledig klassentype is niet toegestaan ​​

Om de een of andere reden kan ik geen functies gebruiken die zijn verbonden aan het object dat ik wil gebruiken. Ik heb een opmerking toegevoegd aan de lijn die niet werkt. Als een fout die ik krijg “fout; aanwijzer naar onvolledig klassetype is niet toegestaan” Help

Dit is code in Dokter.ccp

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

Dit is code in wielrenner.h

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

code in wielrenner.ccp

using namespace std;
#include <string>
#include "Wielrenner.h"
/*
#include "Onderzoek.h"
*/
Wielrenner::Wielrenner(string voornaam, string achternaam, Adres adres, string telefoon, Datum datumInDienst, Datum geboorteDatum, 
                    string persoonType, int lengte, float gewicht, float vo2max, float maxVermogen,list<Onderzoek>* 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<Onderzoek>::iterator it = onderzoeken.begin(); it != onderzoeken.end();     it++){
    Onderzoek onderzoekOB = *it;
    cout << teller << " - ";
    onderzoekOB.print();
    teller++;
 }  
}
void    Wielrenner::setOnderzoeksLijst(list<Onderzoek>& 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<Onderzoek> Wielrenner::getOnderzoekenList(){
return onderzoeken;
}

Antwoord 1, autoriteit 100%

Een “onvolledige klasse” is een klasse die is gedeclareerd maar niet is gedefinieerd. Bijv.

class Wielrenner;

in tegenstelling tot

class Wielrenner
{
    /* class members */
};

Je moet #include "wielrenner.h"in dokter.ccp


Antwoord 2, autoriteit 12%

Eén ding om op te letten…

Als je klas is gedefinieerd als een typedef:

typedef struct myclass { };

Probeer vervolgens naar het te verwijzen als struct myclassWaargens anders, u krijgt onvolledige type fouten links en rechts. Het is soms een vergissing om de klasse / struct te vergeten, was typedef. Als dat het geval is, verwijdert u “Struct” van:

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

Gebruik in plaats daarvan …

mystruct *myvar = value;

Gemeenschappelijke fout.


Antwoord 3, Autoriteit 5%

U krijgt deze foutmelding bij het declareren van een voorwaartse referentie in de verkeerde naamruimte, aldus een nieuw type verklaart zonder deze te definiëren. Bijvoorbeeld:

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

… maar in klasse A werd als volgt gedefinieerd:

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

Aldus is A gedefinieerd als X::A, maar ik gebruik het als X::Y::A.

De oplossing is uiteraard om de voorwaartse referentie naar de juiste plaats zoals SO te verplaatsen:

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

Antwoord 4

Ik kwam het dezelfde probleem aan en loste het op door mijn # -cluden te controleren.
Als u QKeyEvent gebruikt, moet u ervoor zorgen dat u het ook opneemt.

Ik had een klasse zoals deze en mijn fout verscheen bij het werken met “event” in het .cpp-bestand.

MyFile.h

   #include <QKeyEvent> // 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);
    };

Antwoord 5

Uitchecken Als u een importeert.

Other episodes