2

作業中のプログラムをコンパイルすると、次のようになります。

'クラス'の前に初期化子が必要です

私のファイルにエラーがありClass.hます。インターネットでエラーメッセージを調べましたが、正確なエラーは見つかりませんでした。同様のエラーはセミコロンの欠落が原因のようですが、なぜ必要なのかわかりません。これはエラーが指しているコードです。その前に他の関数やクラスはありません。

class Account
{
    public:
    double dAccountBalance;

    double dAccountChange(double dChange);
};

Class.cppファイルでは、double dAccountChange(double dChange)関数が定義されています。これがエラーの原因ではないと思いますが、これはコードです。

double Account::dAccountChange(double dChange)
{
    dAccountBalance += dChange;

    return 0.0;
}

Class.hのコードを次のように変更すると、

;
class Account
{
    public:
    double dAccountBalance;

    double dAccountChange(double dChange);
};

エラーメッセージは生成されませんが、その前にある唯一のコードは次のプリプロセッサ行であるため、なぜその前にセミコロンが必要なのか理解できません。

#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED

エラーが生成される理由について何か考えはありますか?

4

2 に答える 2

9

ほとんどの場合、直前に インクルードするヘッダーファイルには、次のclass.hようなものがあります。

class xyzzy {
    int plugh;
}

セミコロンを閉じることなく。これでコードシーケンスが作成されます。

class xyzzy {
    int plugh;
}
class Account
{
    public:
    double dAccountBalance;

    double dAccountChange(double dChange);
};

これは明らかに無効です。最初の行の前にセミコロンを挿入するclass.hと修正されますが、配置する場所が明らかに間違っています(その直後にインクルードするすべてのヘッダーファイルには、開始セミコロンが必要になるためです。また、これはの定義の一部です。最初のヘッダーであり、そこにあるはずです)。

これは正確なコードシーケンスではないかもしれませんが、非常によく似たものになり、根本的な理由はのヘッダーにテキストがないことです。

戻って、以前のインクルードファイルに入れる必要があります。

たとえば、次のことを考慮してください。

include1.h:
    class xyzzy {
        int plugh;
    }
include2.h:
    class twisty {
        int little_passages;
    };
main.cpp:
    #include "include1.h"
    #include "include2.h"
    int main (void) {
        return 0;
    }

これをコンパイルすると、次のようになります。

include2.h:3: error: multiple types in one declaration

ただし、セミコロンを最後include1.h(またはinclude2.hすでに確立しているものの最初)に配置すると、修正されます。

于 2012-08-19T05:54:33.973 に答える
3

問題は、他のヘッダーの1つにあり、#includeの前にありclass.hます。

メインcppファイルの先頭を表示すると、手がかりが得られる場合があります。

于 2012-08-19T05:43:01.853 に答える