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()
with pp
set:
for(bf::directory_iterator it = bf::directory_iterator(p); it != bf::directory_iterator(); it++) {
bf::path pp = *it;
...
ただし、ここの API に従って動作するはずです: http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference.html#canonical
注: 私が修正した他のいくつかのエラーは、このタイプのものでした。私は書かなければなりませんでした:
obj.method1().method2()
なので
class2 &obj2 = obj.method1();
obj2.method2();
そうしないと、エラー メッセージが表示されます。
それで... の呼び出しの何が問題なのboost::filesystem::canonical(...)
ですか?