error: C2146: syntax error : missing ';' before identifier 'm_Employer',

error: C2146: syntax error : missing ';' before identifier 'm_Employer',

连同错误 "C4430 missing type specifier int assumed" x2 和 C2061 语法错误 Employer 代码:

Person.h

    #ifndef PERSON_H
    #define PERSON_H
    #include "employer.h"
    #include "position.h"
    #include <QTextStream>
    #include <QString>

    class Person
    {
    private:
        QString m_Name;
        bool m_Employed;

此处出现语法错误且缺少类型说明符:

        Employer m_Employer;
        Position m_Position;
    public:
        Person();
        Person(QString name);
        QString toString();

这里有语法错误

        void setPosition(Employer &newC, Position &newP);
        void getPosition();
        void getEmployer();
    };

    #endif // PERSON_H

Person.cpp

    #include "person.h"

    Person::Person()
    {
        m_Name = "";
    }

    Person::Person(QString name)
    {
        m_Name = name;
    }

    QString Person::toString()
    {
        return "";
    }

    void Person::setPosition(Employer &newC, Position &newP)
    {

    }

Employer.h 文件:

    #ifndef EMPLOYER_H
    #define EMPLOYER_H
    #include "person.h"
    #include <QTextStream>
    #include<QString>


    class Employer
    {
    private:
        QString m_Name;
        QString m_Market;

    public:
        Employer();
        Employer(QString name, QString market);

这里有语法错误

        bool hire(Person &newHire, Position pos);
        QString toString();
    };

    #endif // EMPLOYER_H

Employer.cpp

    #include "employer.h"

    Employer::Employer()
    {

    }

    Employer::Employer(QString name, QString market)
    {
        m_Name = name;
        m_Market = market;
    }

    QString toString()
    {
     return "";
    }

Position.h 文件:

    #ifndef POSITION_H
    #define POSITION_H
    #include <QTextStream>
    #include <QString>

    class Position
    {
    private:
        QString m_Name;
        QString m_Description;

    public:
        Position();
        Position(QString name, QString description);
        ~Position();
        QString toString();
    };

    #endif // POSITION_H

Position.cpp 文件:

    #include "position.h"

    Position::Position()
    {
        m_Name = "";
        m_Description = "";
    }
    Position::Position(QString name, Qstring description)
    {
         m_Name = name;
         m_Description = description;
    }

    QString Position::toString()
    {
      return "";
    }

我也有一个主电源,但它没有被使用,我想在出现更多问题之前解决这些问题 我一直在查看这个,但我似乎无法找出问题所在,非常感谢任何帮助,提前谢谢你。

你有循环依赖。 Person.h 包括 Employer.h 其中包括 Person.h.

您可以在 Employer.h:

中转发声明 Person

class Person;添加到Employee.h并将#include "person.h"移动到Employee.cpp

错误的来源是当编译器去编译Employer.cpp(或Person.cpp哪个并不重要)时,它包括Employer.h,它告诉编译器包含 Person.h,这告诉编译器包含 Employer.h,但这次包含守卫启动并停止再次包含 Employer.h 的内容。所以它开始编译 Person.h 而没有提到 Employer。因此,当它看到 Employer m_employer.

时,它是一个未知类型