我正在尝试编译和运行一个 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/