c++ - fedora 20 上的 boost/lexical_cast

标签 c++ boost lexical-cast fedora20

我正在尝试编译和运行一个 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 的电脑上,这段代码运行良好。

知道发生了什么事吗?

谢谢

最佳答案

您的留言与 boost 无关。

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

关于mdp.h中的另一个错误,需要显示相关代码


更新啊。

问题出在定义上。它破坏了 boost header 的编译,因为 mdp.h 写入;

std::endl

在某个地方,预处理器正在把它变成

std::"\n"

这不是有效的 C++。

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

关于c++ - fedora 20 上的 boost/lexical_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28365707/

相关文章:

c++ - 如何将字符数组复制到字符串 C++

c++ - Boost上下文实现

C++ 在多个子字符串上拆分字符串

c++ - 是否有 boost::phoenix::at_c 结合 boost::spirit::qi::grammar 的替代方案

c++ - Stringstream 到 vector<int>

c++ - 我可以在不使用 include 的情况下扩展头文件中的类吗?

c++ - 如何在C/C++中获取数组的距离

c++ - 转换字符串标记流时如何避免重复istringstream构造

c++ - 如何 move initializer_list 的元素?