不允许指向不完整类类型的指针

由于某种原因,我不能使用附加到我想要使用的对象的函数。我在行中添加了一个不起作用的注释。作为一个错误,我得到“错误; 指针不允许不完整的类类型”请帮助

这是 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++;
}

这是 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_ */

代码是 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;
}
254657 次浏览

一个“不完整的类”是一个声明但没有定义的类。

class Wielrenner;

而不是

class Wielrenner
{
/* class members */
};

你需要在 dokter.ccp#include "wielrenner.h"

我遇到了同样的问题,通过检查 # include 解决了它。 如果使用 QKeyEvent,则必须确保也包含它。

我有一个这样的类,在处理.cpp 文件中的“ event”时出现了错误。

我的档案

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

还有一件事要检查。

如果您的类被定义为 typedef:

typedef struct myclass { };

然后尝试在其他任何地方将其称为 struct myclass,您将看到左右各有一个不完整类型错误。忘记 class/struct 是类型定义的有时是错误的。如果是这种情况,删除“ struct”:

typedef struct mystruct {}...


struct mystruct *myvar = value;

取而代之的是..。

mystruct *myvar = value;

常见错误。

在错误的命名空间中声明转发引用时会出现此错误,从而在未定义新类型的情况下声明新类型。例如:

namespace X
{
namespace Y
{
class A;


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

但是,在 A 类中是这样定义的:

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

因此,A 被定义为 X::A,但我使用它作为 X::Y::A

解决办法显然是将前向参考移到适当的位置,如下所示:

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

检查一下你是否遗漏了一些进口商品。

当头文件没有在需要的地方显式包含,而是通过其他头文件隐式包含时,也会出现这个问题。