我正在尝试编译和运行一个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";被认为是不好的做法