Я отчаянно нуждаюсь в помощи и руководстве. Я пытался заставить это скомпилировать, но боролся из-за того, что есть 3 класса, а не сотни о том, как здесь должны работать объявления include / forward.
Ошибка помечена в person.h.
В дополнение к ошибке есть предупреждение, которое я отметил в main.cpp.
Это консольное приложение.
Заранее спасибо.
person.h
#ifndef PERSON_H
#define PERSON_H
#include <QString>
class Employer;
class Person
{
public:
Person(QString name);
QString toString() const;
void setPosition(Employer newE, Position newP);
Position getPosition() const;
private:
QString m_Name;
bool m_Employed;
Position m_Position;
Employer m_Employer; //--> ERROR: field `m_Employer' has incomplete type.
};
#endif // PERSON_H
person.cpp
#include "employer.h"
#include "position.h"
#include "person.h"
Person::Person(QString name) : m_Name(name), m_Employed(false), m_Position(""), m_Employer("")
{
}
void Person::setPosition(Employer newE, Position newP)
{
m_Position = newP;
m_Employed = true;
m_Employer = newE;
}
Position Person::getPosition()const
{
return (m_Employed ? m_Position : Position("Professional nose-picker"));
}
QString Person::toString()const
{
return m_Name + ", Employed: " + (m_Employed ? "Yes" : "No") + ", Position: " + getPosition().toString();
}
employer.h
#ifndef EMPLOYER_H
#define EMPLOYER_H
#include <QString>
//class Position;
//class Person;
class Employer
{
public:
Employer(QString name, QString market = "");
void hire(Person &newHire, Position pos);
QString toString() const;
private:
QString m_Name;
QString m_Market;
};
#endif // EMPLOYER_H
employer.cpp
#include "employer.h"
#include "person.h"
#include "position.h"
Employer::Employer(QString name, QString market) : m_Name(name), m_Market(market)
{
}
QString Employer::toString()const
{
return m_Name + (m_Market != "" ? ", Market: " + m_Market : "");
}
void Employer::hire(Person &newHire, Position pos)
{
newHire.setPosition(*this, pos);
}
position.h
#ifndef POSITION_H
#define POSITION_H
#include <QString>
class Position
{
public:
Position(QString name, QString desc = "");
QString toString() const;
private:
QString m_Name;
QString m_Desc;
};
#endif // POSITION_H
position.cpp
#include "position.h"
Position::Position(QString name, QString desc)
:m_Name(name), m_Desc(desc)
{}
QString Position::toString()const
{
return m_Name + (m_Desc != "" ? ", Description: " + m_Desc : "");
}
main.cpp
#include <QtCore/QCoreApplication>
#include <QTextStream>
#include "position.h"
#include "person.h" //--WARNING -> In file included from main.cpp:4:
#include "employer.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream cout(stdout);
Person bob("Bob");
Employer devCo("Dev Co");
cout << bob.toString() << endl;
bob.setPosition(is, Position("Developer", "Software Eng"));
cout << bob.toString() << endl;
cout << devCo.toString() << endl;
return a.exec();
}