在不同平台/ gcc版本上使用boost时的奇怪行为

时间:2013-03-05 17:12:43

标签: c++ boost

我正在使用Boost库实现一个程序。该程序在不同平台上编译。我在Mac OS上没有问题。

相同的代码会在不同的平台上生成编译器错误。编译器是不同的:在Mac OS上我使用gcc 4.2,在Linux gcc 4.4,...

但是,有一些错误很难解释。

我正在使用Boost 1.5.3。例如,我有这个奇怪的消息:

In member function 'std::vector<std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > >* FolderReader::get_filenames()':
/home/u/projects/prj/src/batch/folderreader.cpp:119: error: 
   'canonical' is not a member of 'bf'

其中bf定义为namespace bf = boost::filesystem;

以这种方式调用

canonical():设置bf::canonical(pp).string()的{​​{1}}:

pp

但是,它应该根据API在这里工作: http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference.html#canonical


注意: 我刚刚纠正的其他一些错误属于这种类型。我不得不写:

for(bf::directory_iterator it = bf::directory_iterator(p); it != bf::directory_iterator(); it++) {
    bf::path pp = *it;
...

作为

obj.method1().method2()

否则我会收到错误消息。

那么......我对class2 &obj2 = obj.method1(); obj2.method2(); 的调用有什么问题?

1 个答案:

答案 0 :(得分:2)

我会确保您使用boost::filesystem的第3版,这是一项重大更改,包括添加canonical()。您可能需要升级您的升压装置或define BOOST_FILESYSTEM_VERSION以获得V3。

即使您安装了1.53增强版,也需要make sure that your code is being built against it。您的操作系统可能具有正在拾取的默认版本。例如,Debian squeeze存储库(当前的稳定版本)在boost 1.42上,根本不包含boost::filesystem V3。