1. ホーム
  2. c++

[解決済み] error C2061: 構文エラー : 識別子 'string'

2022-02-27 03:03:37

質問

このエラーはおそらくインクルードの問題だと思います。 error C2146: syntax error : missing ';' before identifier 'getName'error C2146: syntax error : missing ';' before identifier 'name'

は、クラスの例です。

#include "stdafx.h"

class participant
{
public:
participant(int id, string name);
~participant(void);

int getId();
string getName();

private:
        int id;
    string name;
};

これが私の stdafx.h ファイルを作成します。

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <list>
#include "day.h"
#include "appointment.h"
#include "extendedAppointment.h"
#include "participant.h"
#include "calendar.h"
using namespace std;

#define no_such_appointment_error 20;
#define conflicting_appointments_error 21;
#define noSuchDayError 22;
#define incorrectAppointmentError 23;

解決方法は?

そこで、カスタムヘッダーファイルなしで投稿されたコードをコンパイルしてみたところ、問題なく動作しました。 このことから、これらのヘッダーファイルのいずれかに問題があるのではと推測しています。

#include "day.h"
#include "appointment.h"
#include "extendedAppointment.h"
#include "participant.h"
#include "calendar.h"

マクロ、セミコロンで終了していないクラス/構造体などの可能性があります。 それらをチェックしてみてください。

最後に、余談をいくつか。

まず、1つ目。 using をヘッダーファイルの名前空間として使用することは、とんでもない考えです。あなたのヘッダーを含むすべてのファイルに using namespace std; の中に入っています(これは悪いことです)。 を含むすべてのファイルに、それほど多くのヘッダーファイルをインクルードしたくないでしょう。 stdafx.h .

次に、それを削除すると string はすぐに未定義になります(代わりにstd::stringを使用してください)。

最後に、なぜあなたの #define はセミコロンで終わっているのですか? その必要はありません。