错误: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”的前面)