質問
プロジェクトを編集しているときに、この非常に奇妙な問題があります。 MOCは、ファイル/クラスのどこにも言及されていませんが、クラス名に名前空間を追加しているようです。
ただし、名前空間は私が使用しているライブラリに存在しますが、ヘッダーファイルに遠くに隠されており、UIファイルでは使用しません。これがMOCが生成するものです:
const QMetaObject SmpTl::CaptureController::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController,
qt_meta_data_SmpTl__CaptureController, 0 }};
SmpTl
名前空間は、の宣言のどこにも言及されていません CaptureController
, 、しかし、MOC生成された.cppファイルに表示されます。
QT統合でVisual Studioを使用しています。
解決
SmpTl
名前空間です CaptureController
MOCで発見されたように、で定義されています。
Q_OBJECT
マクロはの宣言に拡大します staticMetaObject
- クラスの定義の内部(とりわけ拡大することの中でも)。 MOCファイルには、その変数の定義が含まれています。
これが正しくない場合は、QTバージョンとヘッダーファイルの剥がれたバージョンを投稿してください。
他のヒント
私もこの問題に出くわしました。私は次のようなコードを持っていました:
namespace foo {
#ifdef _WIN32
... // This code was fine
#else
#error Not Supported
#endif
}
これを混乱させたMOCを思考名空間にしました foo
閉じたことはありません。どうやら、それは知りませんでした _WIN32
定義されており、エラーメッセージの周りに引用符を付けられるのを忘れていたという事実につまずいた。に変更:
#error "Not Supported"
私の問題を修正しました。
所属していません StackOverflow