C++ visualstudio:C++;换行常数误差

C++ visualstudio:C++;换行常数误差,c++,visual-studio-2010,qt,C++,Visual Studio 2010,Qt,在Qt项目上使用Visual Studio(使用Qt插件),似乎总是会发出错误消息: error C2001: newline in constant 从以下行: this->setApplicationVersion(QString(BUILD_VERSION)); 或者每当我使用QMake文件中定义的编译器常量时。BUILD_版本在我的QMake BUILD recipe中定义,如果我使用不同的IDE,编译项目可以成功工作(即使我使用相同的MSVC编译器,一切都可以工作) 我想我要

在Qt项目上使用Visual Studio(使用Qt插件),似乎总是会发出错误消息:

error C2001: newline in constant
从以下行:

this->setApplicationVersion(QString(BUILD_VERSION));
或者每当我使用QMake文件中定义的编译器常量时。BUILD_版本在我的QMake BUILD recipe中定义,如果我使用不同的IDE,编译项目可以成功工作(即使我使用相同的MSVC编译器,一切都可以工作)

我想我要么在Qt插件中或者在Visual Studio中丢失了一个首选项,要么我需要在QMake文件之外重新定义常量,等等

该常量由Intellisense定义并提取为:

#define BUILD_VERSION \"0.1.0\"
发现问题在于对常量中的引号进行转义,在VisualStudio中,这不起作用,但它可以与Mingw以及命令行上的MSVC编译器一起工作。使用Visual Studio定义不带转义的常量:

#define BUILD_VERSION "0.1.0"
问题是要在QMake文件中定义常量,我需要像这样转义:

#define BUILD_VERSION \\\"0.1.0\\\"
有没有办法在QMake文件中定义它们并使它们与Visual Studio一起工作?

考虑编写

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;
}

你能预处理文件以查看它在特定行上的计算结果吗?除了Qt的元对象生成(不会重写文件)之外,你无论如何也看不到预处理文件。感谢你指出这一点,你让我意识到问题在于如何在常量中转义引号。谢谢,这解决了Qt和Visual Studio中的问题,修正了一个非常烦人的问题!不过,使用TO_字符串会引发一个警告<代码>警告C4003:没有足够的实际参数用于宏“TO_STRING_AUX”有什么解决方法吗?感谢您的跟进和解释。
#define TO_STRING_AUX( ... )    "" #__VA_ARGS__
#define TO_STRING( x )          TO_STRING_AUX( x )