C++ visualstudio:C++;换行常数误差
在Qt项目上使用Visual Studio(使用Qt插件),似乎总是会发出错误消息: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编译器,一切都可以工作) 我想我要
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 )