- ベストアンサー
シンボル名の再定義のためにコンパイルエラー
Motifのヘッダー(Aとする)にMax(a,b)というdefineがあり、そのヘッダーの(恐らく)後にincludeしている某クラスライブラリのヘッダー(Bとする)の関数定義にMax(a,b)というのがあります。 そのため、B中のMaxでは、Aのdefineが展開されてしまい、コンパイルエラーになってしまいます。 どちらのヘッダーも修正するわけにはいかないのですが、includeの順番を変えようにも、どこでincludeされているのか調査するのも難航しています。 何か回避策、もしくは解析するのに便利なツールなどご存知でしたら教えてください。 なお、開発環境はUNIX(正しくはAIX)です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
やはり、 #include <Motifのヘッダー> #ifdef Max #undef Max // 一旦undefして #endif #include <それ以外のヘッダー> とするのが正解かと。(あまり、エレガントではないですが) Maxマクロがどこで定義されているのかはGrepツールを使って インクルードファイル中を調べれば見つかるかと思いますが。
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
回答No.1
某クラスライブラリのヘッダーを include している直前で #undef Max とする。但し、それ以降で、マクロ Max は使えません。