-PR-
解決済み

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

  • すぐに回答を!
  • 質問No.73700
  • 閲覧数186
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 56% (111/197)

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

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

  • 回答No.2
レベル6

ベストアンサー率 40% (2/5)

やはり、

#include <Motifのヘッダー>
#ifdef Max
#undef Max   // 一旦undefして
#endif
#include <それ以外のヘッダー>

とするのが正解かと。(あまり、エレガントではないですが)
Maxマクロがどこで定義されているのかはGrepツールを使って
インクルードファイル中を調べれば見つかるかと思いますが。
関連するQ&A
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

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

#undef Max

とする。但し、それ以降で、マクロ Max は使えません。


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ