软顶帽20上的boost/llexical_cast



我正在尝试编译和运行一个C++程序,其中包含fedora 20中的boost/lexical_cast.hpp,其中安装了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 1004和boost 1.40的电脑中,这些代码运行得很好。

知道发生了什么吗?

感谢

您的消息与boost无关。

不能将字符串文字作为char*传递。它总是常量,所以将其作为char const*:在Coliru上直播传递

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


更新啊。

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

std::endl

在某个地方,预处理器正在将其转化为

std::"n"

这不是有效的C++。

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

  • http://en.cppreference.com/w/cpp/language/using_declaration
  • 为什么";使用命名空间std";被认为是不好的做法

相关内容

  • 没有找到相关文章

最新更新