it-swarm.com.de

Ein Zeiger auf einen unvollständigen Klassentyp ist nicht zulässig

Aus irgendeinem Grund kann ich keine Funktionen verwenden, die mit dem Objekt verbunden sind, das ich verwenden möchte. Ich habe der Zeile einen Kommentar hinzugefügt, der nicht funktioniert. Als Fehler bekomme ich "Fehler; Zeiger auf unvollständigen Klassentyp ist nicht erlaubt" Bitte helfen

Dies ist der 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++;
 }  

Dies ist der 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;
}
47
Sharpless512

Eine "unvollständige Klasse" wird deklariert, aber nicht definiert. Z.B.

class Wielrenner;

im Gegensatz zu

class Wielrenner
{
    /* class members */
};

Sie müssen #include "wielrenner.h" in dokter.ccp

86
KRyan

Eine Sache zu prüfen ...

Wenn Ihre Klasse als Typedef definiert ist:

typedef struct myclass { };

Dann versuchen Sie, es als struct myclass an anderer Stelle zu bezeichnen. Sie erhalten unvollständige Typfehler links und rechts. Es ist manchmal ein Fehler zu vergessen, dass die Klasse/Struktur typisiert wurde. Wenn dies der Fall ist, entfernen Sie "struct" von:

typedef struct mystruct {}...

struct mystruct *myvar = value;

Verwenden Sie stattdessen ...

mystruct *myvar = value;

Häufiger Fehler.

6
Bryan Wilcutt

Sie erhalten diesen Fehler, wenn Sie einen Vorwärtsverweis im falschen Namespace deklarieren und somit einen neuen Typ deklarieren, ohne ihn zu definieren. Zum Beispiel:

namespace X
{
  namespace Y
  {
    class A;

    void func(A* a) { ... } // incomplete type here!
  }
}

... aber in Klasse A wurde folgendermaßen definiert:

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

Also wurde A als X::A definiert, aber ich verwendete es als X::Y::A

Die Lösung besteht offensichtlich darin, die Vorwärtsreferenz wie folgt an den richtigen Ort zu verschieben:

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

Überprüfen Sie, ob Sie etwas Import vermissen.

0
zeroDivider

Ich bin auf dasselbe Problem gestoßen und habe es gelöst, indem ich meine #includes .

Ich hatte eine Klasse wie diese und mein Fehler erschien beim Arbeiten mit "event" in der .cpp-Datei.

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);
    };
0
Matthis Kohli