私は奇妙な状況に遭遇しました。 #ifndef #define #endifフラグをすべての.hファイルに置いた場合、インクルードヘッダファイルの順序はあまり関係ありません。' - 'トークンの前にunqualified-idが必要です
旧コードが a.h
#ifndef A_H
#define A_H
blah blah blah
#endif
a.cc
#include "a.h"
blah blah blah
とコード上ではうまくいきました。
は今は
#ifndef B_H
#define B_H
blah blah blah
#endif
新しいa.cc
#include "a.h"
#include "b.h"
blah blah blah
OKコンパイル上記a.cc b.h b.h
新しいヘッダを追加しました。しかし、私は
新しいa.ccバージョンのエラーで失敗しました。コンパイル2
#include "b.h"
#include "a.h"
blah blah blah
にa.ccを変更する場合:前に期待修飾されていない-ID「 - 」トークン。
ごく小さな例では、同じエラーを再現できません。コンパイルエラーの結果、大きなプロジェクトが発生しました。そして、私が上記のように作成された小さな例でテストした場合。それはコンパイルされましたが、もし私がプロジェクトに戻ってきたら。 #include指令は重要です。私はこの問題がどこで起こるか分かりません。 誰かが私に手がかりを与えることができます多くの役に立つでしょう。 ありがとうございました
[解決済み] 私は自分でこの問題を解決しました。しかし、他の人々もそれにこだわっているかもしれないと思います。問題の原因となった理由は、あなたがこの2行
#define var_undef (-1)
const int var_undef = -1
を交換する場合は、エラーがunqualified-期待とそれはコンパイルしながら、それは、コンパイルtest.cc
const int var_undef = -1;
#define var_undef (-1)
に次
のようでした私が言ったように、 ' - 'トークンの前のid。
'#include'は基本的にはコピーアンドペーストのプロセスなので、インクルードの順序は重要です。最小のテストケースを作成するように努めてください。それ以外の場合、私たちがあなたに与えることのできるヘルプはありません。 –
ヘッダファイルのインクルード順序は関係ありません。 –
ヘッダに '#define'マクロが含まれている場合や、' b.h'の最後に何らかのエラーがある場合は、*は関係ありません。おそらく ';'または '}'が欠けていますか? –