I keep getting this error and I don't understand what I do wrong: " error: invalid use of incomplete type 'class Auftrag'" at method getAuftraeg() where I want to print the "vpa" list. Please help me!!
#include <iostream>
#include <vector>
using namespace std;
class Auftrag;
class Kunde {
public:
Kunde(Kunde *kunde) {
*this = kunde;
}
Kunde(string s) : name{s}, vpa{} {}
void print(){
cout<<this->name<<endl;
getAuftraege();
}
string getName() const { return name; }
void addAuftrag(Auftrag *auftrag){
this->vpa.push_back(auftrag);
}
void getAuftraege() {
for (int i{0};i<vpa.size();i++)
cout << this->vpa.at(i)->getID();
}
private:
string name;
vector<Auftrag*> vpa;
};
class Auftrag {
public:
Auftrag(string s) : id{s}, pk{nullptr} {}
void print() {
cout<<this->id<<endl;
}
string getID() const { return id; }
void setKunde(Kunde *kunde){
this->pk = kunde;
}
Kunde *getKunde() const;
private:
string id;
Kunde *pk;
};
int main() {
// Anlegen: zwei Kunden und drei Auftraege
Kunde *k1{new Kunde{"Sepplhuber-Finsterwalder"}};
Kunde k2{"Kurz"};
Auftrag *a1{new Auftrag{"Decke streichen"}};
Auftrag *a2{new Auftrag{"Wand tapezieren"}};
Auftrag a3{"Jalousie montieren"};
Auftrag a4{"Laminat verlegen"};
// Erste Assoziationsrichtung:
// aus einem Objekt vom Typ Kunde
// zu Objekten vom Typ Auftrag
k1->addAuftrag(a1);
k1->addAuftrag(a2);
k1->addAuftrag(&a3);
// Zweite Assoziationsrichtung:
// aus einem Objekt vom Typ Auftrag
// zu einem Objekt vom Typ Kunde
a4.setKunde(&k2);
// Alles ausgeben:
k1->print();
k2.print();
a1->print();
a2->print();
a3.print();
a4.print();
// Speicher zurueckgeben:
delete k1;
k1 = nullptr;
delete a1;
a1 = nullptr;
delete a2;
a2 = nullptr;
}
Place the function definitions after the definition of the class
Auftrag
.For example
The compiler has to know the definition of the class
Auftrag
that to determine that it has such a data member asvpa
.