7

Qt プロジェクト (Qt アドオンを使用) で Visual Studio を使用すると、常にエラー メッセージが表示されるようです。

error C2001: newline in constant

次の行から:

this->setApplicationVersion(QString(BUILD_VERSION));

または、QMake ファイルで定義されたコンパイラ定数を使用するたびに。BUILD_VERSION は私の QMake ビルド レシピで定義されており、別の IDE を使用するとプロジェクトのコンパイルが正常に機能します (同じ MSVC コンパイラを使用しても、すべてが機能します)。

QtアドオンまたはVisual Studio内で設定が欠落しているか、QMakeファイルなどの外部で定数を再定義する必要があると思います...

定数は次のように定義され、Intellisense によって取得されます。

#define BUILD_VERSION \"0.1.0\"

問題は定数内の引用符をエスケープすることにあることがわかりました.Visual Studioではこれは機能しませんが、MingwおよびコマンドラインのMSVCコンパイラでは機能します. エスケープせずに定数を定義すると、Visual Studio で動作します。

#define BUILD_VERSION "0.1.0"

問題は、QMake ファイルで定数を定義することです。次のようにエスケープする必要があります。

#define BUILD_VERSION \\\"0.1.0\\\"

それらを QMake ファイルで定義し、Visual Studio で動作させ続ける方法はありますか?

4

1 に答える 1

3

書くことを検討してください

this->setApplicationVersion( QString( TO_STRING( BUILD_VERSION ) ) );

ここでTO_STRING何かを文字列に変換します:

#include <iostream>
using namespace std;

#define TO_STRING_AUX( x )  #x
#define TO_STRING( x )      TO_STRING_AUX( x )

#define BUILD_VERSION 0.1.0

int main()
{
    cout << TO_STRING( BUILD_VERSION ) << endl;
}

私はQMakeを持っていませんが、問題はQMakeが同様のTO_STRING操作を行うことであり、最初に述べたように、それを自分で行うことも一般的な解決策であると思います。


編集: @sixonesはフォローアップコメントで尋ねます、

TO_STRINGの使用からスローされる警告は次のとおりです。警告C4003:マクロ「TO_STRING_AUX」の実際のパラメータが不足しています。解決方法はありますか?

問題は、引数として渡されたマクロが何も定義されていないことです(未定義ではありませんが、何も定義されていません)。

解決策は、次のようにC99 / C++11可変個引数マクロ定義を使用することです。

#define TO_STRING_AUX( ... )    "" #__VA_ARGS__
#define TO_STRING( x )          TO_STRING_AUX( x )
于 2012-08-12T17:36:43.390 に答える