2016-04-19 13 views
1

私は過去2時間を費やして、なぜ私のプログラムに非常に多くのエラーメッセージがあるのか​​理解しようとしました。クラスヘッダーファイルの最後に閉じ括弧を追加するのを忘れていました。だから私の質問は:なぜ私は私の他のプロジェクトファイルの中にその欠けている欠点の結果として発生したエラーのメッセージのcraploadを持って、私のヘッダーファイルで、この問題についてのエラーメッセージを取得していないのですか?誰かが、初心者が理解できる用語で私にこれを説明してくださいすることができれば、それはクラス定義の末尾に中括弧がない場合、C++クラスのヘッダーファイルにエラーメッセージはありませんか?

+1

このヘッダーファイルは一部のソースファイルに含まれていたため、実際のコンパイルが行われる前に完了しています。閉じ括弧が見つからない場合は、クラス定義が終了するはずの場所をコンパイラが知る方法はありません(原理的には、互いに多くのファイルにまたがる可能性があります)。ヒント: – user463035818

答えて

0

、私はあなたがこの例のように、いくつかのクラスを定義したとします

class A 
{ 
    public: 
    A() {} 
    ~A() {} 
    void do_something(); 
// missing }; 

class B 
{ 
    public: 
    B() {} 
    ~B() {} 
    void do_something_other(); 
}; 

コンパイラは、クラスBの説明を読み始め、あなたのクラスBは、この正しい例と同様に、入れ子になったクラスとして表示されているので気づき誤りがない:次に

class A 
{ 
    public: 
    A() {} 
    ~A() {} 
    void do_something(); 

    class B 
    { 
     public: 
     B() {} 
     ~B() {} 
     void do_something_other(); 
    }; 
}; 

、それはのために不可能ですコンパイラはあなたが何をしたいか、どのクラスがネストされているかを知っています。

もちろん、間違いがあります。少なくとも、閉じ括弧の数。しかし、おそらくあなたのコードの一部がクラスの記述の中で禁止されているときです。エラーがverry strangeになるのはこのためです。

3

は、はい、それが起こる素晴らしい:)

乾杯でしょう。インクルードファイルは単なるテキストであり、有効な自己完結型コードを含む必要はありません。コピーペーストとして#includeを考えることができます。あなたは持っている可能性があり

main.cppに

#include "a.h" 
#include "b.h" 

ああ

int main() { 

あなたの場合BH

return 0; 
} 
+2

とタイプしている間に括弧が紛失していることを示すIDEを使用すると、メモを追加することができますが、これは完全に合法ですが推奨されません(コードの難読化コンテストに参加している場合を除く) – user463035818

関連する問題