【问题标题】:Casting (converting) number in a format with multiple dots (a version number) to string将具有多个点(版本号)的格式的数字转换(转换)为字符串
【发布时间】:2013-10-15 14:02:11
【问题描述】:
#define EXTERNAL_API_VERSION 1.12.1
std::string version = boost::lexical_cast<std::string>(EXTERNAL_API_VERSION);

这段代码会产生编译错误:

error C2143: syntax error : missing ')' before 'constant'
error C2059: syntax error : ')'

是否有任何简单的替代方法可以将这种格式的数字(超过一个点)转换为字符串?

【问题讨论】:

  • 1.12.1 不是有效的文字常量。
  • 这不是 C++ 中的有效词位,所以不,这是不可能的。在代码中拥有版本的唯一方法是字符串。
  • @PaperBirdMaster 你是对的,但我必须把它转换成字符串:-)
  • @Sanich 那为什么不把它作为一个字符串开头呢?
  • const char* EXTERNAL_API_VERSION = "1.12.1"; 有什么问题?

标签: c++ string


【解决方案1】:

在不接触EXTERNAL_API_VERSION 的情况下,您需要将该marco 扩展为两个级别的字符串文字:

#define S(X) #X
#define STR(X) S(X)

std::string version = STR(EXTERNAL_API_VERSION);

【讨论】:

  • @Sanich:第一步,你将EXTERNAL_API_VERSION 扩展为1.12.1,在下一步中,你通过#"1.12.1" 将其变为字符串文字。您不能将这两个步骤合二为一。阅读this 很有用
猜你喜欢
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2011-11-25
  • 1970-01-01
  • 2012-03-20
相关资源
最近更新 更多