作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我迫切需要帮助和指导。一直试图让它编译,但由于有 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/
连同错误“C4430 missing type specifier int assumed”x2 和 C2061 syntax Errors Employer 代码: 人.h #ifndef
我迫切需要帮助和指导。一直试图让它编译,但由于有 3 个类而不是数百个关于包含/转发声明在这里应该如何工作的事实而斗争。 错误在person.h中标记。 除了错误之外,还有一个我在main.cpp中标
我是一名优秀的程序员,十分优秀!