2011-02-27 22 views
1

私は現在Qt(4.7)で小さなアプリケーションを書いています。mocファイルでカスケードされた名前空間を使用するにはどうすればよいですか?

APP_START 
    class CoreClass {...} 
APP_END 

記号はAで定義されています。そして私は、私はリッテ少し怠け者なので、私は開閉名前空間宣言を保持するショートカットのシンボルを使用しています

namespace app { 
    namespace core { 
     class CoreClass {...} 
    } 
} 

のようなネストされた名前空間を使用しますグローバルヘッダーファイル。

これまでのところ、とても良いです。コンパイル時に完璧に動作します。しかし、mocジェネレータがmocファイルを作成すると、名前空間宣言が欠落し、メソッドが標準名前空間に生成されます。シンボルを使用しないと、すべて正常に動作します。

QT_BEGIN_MOC_NAMESPACEシンボルを再定義すると、コンパイラはすべてのインクルードに対して再定義警告をスローします。これは確かに機能しますが、それは本当にいいとは思いません。

この問題の解決策がありますか?

答えて

0

まず、mocがマクロ置換を行っていない理由を知りたいと思います。多分 - 私は間違っていますか?

第2に、-Dパラメータをmocに試してみることができます。おそらく次のようなものです:moc "-DAPP_BEGIN = namespace app {namespace core {"

+0

私はQt Creatorを使用しているので、それはそう思わないでしょう。なぜあなたはmoc dosn'tは、私に良いと聞こえるSubunitを行うあなたのアプローチ。私はそれに従っています。 –

+0

私はQtツールからmocジェネレーターを少し使っていました。そして、プリプロセッサディレクティブを解析するように指示する方法はないようです。悲しい。 –

+0

BTW 'Q_MOC_RUN'シンボルも機能しません。 –

関連する問題