错误:C2146:语法错误:缺少“;”在标识符“m_Employer”之前,

Posted

技术标签:

【中文标题】错误:C2146:语法错误:缺少“;”在标识符“m_Employer”之前,【英文标题】:error: C2146: syntax error : missing ';' before identifier '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 "";
    

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

【问题讨论】:

【参考方案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 时,它是一个未知类型。

【讨论】:

以上是关于错误:C2146:语法错误:缺少“;”在标识符“m_Employer”之前,的主要内容,如果未能解决你的问题,请参考以下文章

错误 C2146:语法错误:缺少“;”在标识符“ContextRecord”之前

vs2008编译错误:error C2146: 语法错误 : 缺少“;”(在标识符“name”的前面)

C++ 编译错误 C2146 和 C4430

头文件互相包含与error C2146: 语法错误 : 缺少“;”的问题

.NET 进程外服务器的#import 问题

类内部结构内部的字符串[关闭]