0

わかりましたので、#ifndefand/or#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、クラスの定義内 (};コードの前) にあるディレクティブにあるため、このヘッダー ファイルを 2 回目に含めると};、エラーの原因となったコードのみが含まれます。

ところで、#ifndefパターンを使用する代わりに#pragma once、同じ効果を持つファイルの先頭で単純に使用できます。プラグマ ワンスとインクルード ガードの使用の詳細については、こちらを参照してください。

于 2015-04-10T19:28:12.013 に答える