Visual Studio:C ++换行常量错误

时间:2012-08-12 13:35:35

标签: c++ visual-studio-2010 qt

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

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一起使用?

1 个答案:

答案 0 :(得分: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 )