私は奇妙な状況に遭遇しました。私の理解では、すべての.hファイルに#ifndef #define #endifフラグを設定した場合、インクルードヘッダーファイルの順序はそれほど重要ではありません。
古いコードああ
#ifndef A_H
#define A_H
blah blah blah
#endif
a.cc
#include "a.h"
blah blah blah
そして、上記のコードは正常に機能しました。
今、私は新しいヘッダーbhを追加しました
bh
#ifndef B_H
#define B_H
blah blah blah
#endif
新しいa.cc
#include "a.h"
#include "b.h"
blah blah blah
上記のa.ccは正常にコンパイルされました。ただし、a.ccをに変更すると
新しいa.ccバージョン2
#include "b.h"
#include "a.h"
blah blah blah
コンパイルはエラーで失敗しました:'-'トークンの前にunqualified-idが必要です。
申し訳ありませんが、小さな例では同じエラーを再現できません。コンパイルエラーにより、大きなプロジェクトが発生しました。そして、上記のように作成された小さな例でテストした場合。コンパイルされましたが、プロジェクトに戻ると。#includeディレクティブの順序は重要です。この問題がどこで発生するかわかりません。誰でも私に手がかりを与えることができれば非常に役に立ちます。前もって感謝します
【解決済み】自分で問題を解決しました。それでも、他の人もそれにこだわっているかもしれないと思います。問題の原因は次のようなものでした。
test.ccで
const int var_undef = -1;
#define var_undef (-1)
これらの2行を入れ替えるとコンパイルされます
#define var_undef (-1)
const int var_undef = -1
私が述べたように、'-'トークンの前にunqualified-idが予想されるエラーでコンパイルされます。