0

好的,所以我缩小了与#ifndef和/或#define关键字有关的问题。

我有 2 个其他.h文件,没有错误的文件和没有错误的文件之间的唯一区别是语法突出显示,#ifndef EMPLOYEE_H并且在#define EMPLOYEE_H有错误的文件上交换。

我不确定这意味着什么(我正在使用 Visual Studio),但它导致我所有其他定义的语句变白,就像它们被包含在某些语句中一样。

我不知道怎么了!

这是我的代码:

//Specification file for the Employee Class
#ifndef EMPLOYEE_H
#define EMPLOYEE_H

#include <string>

using namespace std;


class Employee

{

protected:
//Employee name
string name;
//Required Training hours
string emNum;
//Completed training hours
string hireDate;


public:
//Default Constructor
Employee()
{
    name = " ";
    emNum = " ";
    hireDate = " ";
}

//Constructor
Employee(string aName, string aNumber, string aDate)
{
    name = aName;
    emNum = aNumber;
    hireDate = aDate;
}

//mutators
void setName(string empName) { name = empName; }
void setEmployeeNumber(string empNumber) { emNum = empNumber; }
void setHireDate(string date) { hireDate = date; }

//accessors
string getName() const { return name; }
string getEmployeeNumber() const { return emNum; }
string getHireDate() const { return hireDate; }


#endif



};

我的错误是:

错误 1 ​​错误 C2059:语法错误:'}'

错误 2 错误 C2143:语法错误:缺少 ';' 前 '}'

4 IntelliSense:预期声明

块引用

错误也在最后突出显示 };

4

1 回答 1

3

问题在于#endif位于类定义内(在};代码之前)的指令,因此第二次包含此头文件将仅包含};导致您遇到错误的代码。

顺便说一句,#ifndef您可以简单地#pragma once在文件开头使用具有相同效果的模式,而不是使用该模式。您可以在此处阅读更多关于 pragma once 与使用 include 守卫的信息。

于 2015-04-10T19:28:12.013 回答