【问题标题】:boost/lexical_cast on fedora 20Fedora 20 上的 boost/lexical_cast
【发布时间】:2015-02-06 12:20:11
【问题描述】:

我正在尝试编译和运行一个 C++ 程序,其中包含 boost/lexical_cast.hpp 在 fedora 20 中,安装在哪里 boost-devel 1.50

我得到如下:

ina@localhost Examples]$ g++ -I ../Libraries/ quark_prop.cpp
In file included from ../Libraries/mdp.h:177:0,
                 from ../Libraries/fermiqcd.h:15,
                 from quark_prop.cpp:1:
../Libraries/mdp_utils.h:73:51: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
 int is_file(string filename, char permission[]="r") {
                                                   ^
In file included from ../Libraries/fermiqcd.h:15:0,
                 from quark_prop.cpp:1:
/usr/include/boost/assert.hpp: In function ‘void boost::assertion::detail::assertion_failed_msg(const char*, const char*, const char*, const char*, long int)’:
../Libraries/mdp.h:49:14: error: expected unqualified-id before string constant
 #define endl "\n"
              ^
../Libraries/mdp.h:49:14: error: expected ‘;’ before string constant

在另一台装有操作系统 ubuntu 10.04 和 boost 1.40 的电脑上,此代码可以完美运行。

知道发生了什么吗?

谢谢

【问题讨论】:

  • 这是一个奇怪的定义:#define endl "\n" 尤其是std::endl

标签: c++ boost lexical-cast fedora20


【解决方案1】:

您的消息与提升无关。

您不能将字符串文字作为char* 传递。它始终是 const,因此将其传递为 char const*Live On Coliru

关于mdp.h中的其他错误,需要出示相关代码


更新啊。

问题在于定义。由于 mdp.h 写入,它破坏了 boost 标头的编译;

std::endl

某处,预处理器将其变为

std::"\n"

这不是有效的 C++。

删除定义。改用using(但不在头文件中):

【讨论】:

  • 这个想法是相同的代码可以在另一个具有 libboost-all-dev 1.40 的系统中完美运行。我确定问题不在 mdp.h 中。我已经测试过代码
  • 问题是,较新的编译器添加了我解释的警告(因此存在更多差异)。另外,你同意它没有编译吗?如果您希望我们帮助修复它,您必须显示相关代码。它在另一个系统上编译并不重要。 (除非您乐意改用其他系统)
  • 啊。 @Deduplicator 的评论解释了事情,更新了我的答案
猜你喜欢
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多