Определите оператор ожидаемого объявления C++
Итак, я сузил проблему, связанную с #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: ожидается объявление
Blockquote
Также ошибка подсвечивает };
в самом конце.
1 ответ
Проблема с #endif
директива, которая находится внутри определения класса (до };
код), таким образом, второе включение этого заголовочного файла будет включать только };
код, вызывающий ошибки, которые вы получили.
Кстати, вместо использования #ifndef
шаблон, который вы можете просто использовать #pragma once
в начале вашего файла, который имеет тот же эффект. Вы можете прочитать больше о прагме один раз против использования включенных охранников здесь.