• ベストアンサー

シンボル名の再定義のためにコンパイルエラー

Motifのヘッダー(Aとする)にMax(a,b)というdefineがあり、そのヘッダーの(恐らく)後にincludeしている某クラスライブラリのヘッダー(Bとする)の関数定義にMax(a,b)というのがあります。 そのため、B中のMaxでは、Aのdefineが展開されてしまい、コンパイルエラーになってしまいます。 どちらのヘッダーも修正するわけにはいかないのですが、includeの順番を変えようにも、どこでincludeされているのか調査するのも難航しています。 何か回避策、もしくは解析するのに便利なツールなどご存知でしたら教えてください。 なお、開発環境はUNIX(正しくはAIX)です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yosizo
  • ベストアンサー率40% (2/5)
回答No.2

やはり、 #include <Motifのヘッダー> #ifdef Max #undef Max   // 一旦undefして #endif #include <それ以外のヘッダー> とするのが正解かと。(あまり、エレガントではないですが) Maxマクロがどこで定義されているのかはGrepツールを使って インクルードファイル中を調べれば見つかるかと思いますが。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

某クラスライブラリのヘッダーを include している直前で #undef Max とする。但し、それ以降で、マクロ Max は使えません。

関連するQ&A