gpt4 book ai didi

c++ - Qt 4 C++ 在使用 3 个相互使用的类时出错,错误 : field `m_Employer' has incomplete type

转载 作者:行者123 更新时间:2023-11-28 08:23:29 24 4
gpt4 key购买 nike

我迫切需要帮助和指导。一直试图让它编译,但由于有 3 个类而不是数百个关于包含/转发声明在这里应该如何工作的事实而斗争。

错误在person.h中标记。

除了错误之外,还有一个我在main.cpp中标记的警告。

这是一个控制台应用程序。

提前谢谢你。

人.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

人.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();
}

雇主.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

雇 main.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);
}

位置.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

位置.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 : "");
}

主要.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();
}

最佳答案

Person 类需要了解有关 Employer 的所有信息,因此需要在其中包含 Employer.h 而不是类前向声明​​。

在这种情况下,这个人需要知道 Employee 类的大小,因为您在类中存储了一个 Employee。

如果您想解耦类并只使用前向声明,那么 Person 必须包含指向雇主的指针(原始或智能)。

关于c++ - Qt 4 C++ 在使用 3 个相互使用的类时出错,错误 : field `m_Employer' has incomplete type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4949998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com