0

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 ppset:

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(...)ですか?

4

1 に答える 1

2

boost::filesystemの追加を含む大幅な変更であるのバージョン 3 を使用していることを確認しますcanonical()V3 を取得するには、ブースト インストールをアップグレードするか、BOOST_FILESYSTEM_VERSION を定義する必要がある場合があります。

ブースト 1.53 がインストールされている場合でも、コードがそれに対してビルドされていることを確認する必要があります。お使いの OS には、ピックアップ中のデフォルト バージョンがある場合があります。たとえば、Debian スクイーズ リポジトリ (現在の安定版リリース) はブースト 1.42 にあり、boost::filesystemV3 はまったく含まれていません。

于 2013-03-05T19:09:52.790 に答える