【问题标题】:error: C2146: syntax error : missing ';' before identifier 'm_Employer',错误:C2146:语法错误:缺少“;”在标识符“m_Employer”之前,
【发布时间】:2015-09-15 04:04:51
【问题描述】:

连同错误“C4430 缺少类型说明符 int 假定”x2 和 C2061 语法错误雇主 代码:

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

雇主.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 "";
    }

我也有一个主要的,但它没有使用,我想在出现之前解决这些问题 我一直在寻找这个,我似乎无法找出问题所在,请任何帮助非常感谢,提前谢谢。

【问题讨论】:

    标签: c++ qt inheritance header composite


    【解决方案1】:

    你有一个循环依赖。 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 时,它是一个未知类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多