1

これがコードです(http://www.boost.org/doc/libs/1_52_0/doc/html/container/move_emplace.htmlから)

#include <boost/container/list.hpp>
#include <cassert>
class non_copy_movable
{
   non_copy_movable(const non_copy_movable &);
   non_copy_movable& operator=(const non_copy_movable &);

   public:
   non_copy_movable(int = 0) {}
};
int main ()
{
   using namespace boost::container;
   list<non_copy_movable> l;
   non_copy_movable ncm;
   l.emplace(l.begin(), 0);
   assert(l.size() == 1);
   l.emplace(l.begin());
   assert(l.size() == 2);
   return 0;
}

コンパイルに問題があります。私が試してみました:

g++ 2.cpp -o 2 -I /usr/include/boost

と他の組み合わせもありますが、それは間違っています。

エラー:

2.cpp:1:36: error: boost/container/list.hpp: No such file or directory
2.cpp: In function ‘int main()’:
2.cpp:13: error: ‘boost’ has not been declared
2.cpp:13: error: ‘container’ is not a namespace-name
2.cpp:13: error: expected namespace-name before ‘;’ token
2.cpp:14: error: ‘list’ was not declared in this scope
2.cpp:14: error: expected primary-expression before ‘&gt;’ token
2.cpp:14: error: ‘l’ was not declared in this scope

パスに「ブースト インクルード」があります: /usr/lib の /usr/include/boost ブーストに関連するものは何もありません。次のコマンドを使用して、ubuntu にブーストをインストールしました。

sudo apt-get install libboost-all-dev

ブーストプログラム用のユニバーサルコンパイルはありますか? 別のプログラムもブーストを使用して c++ で記述されており、エラーなしで正常にコンパイルされます。

g++ 1.cpp -o 1
./1
4

1 に答える 1

0

ブーストのほとんどはヘッダーのみのライブラリであるため、/usr/lib にブースト ライブラリがあったとしても多くは見られないことに驚きはありません。

とはいえ、インクルードパスの設定が間違っていると思います。boost/container/list.hpp をインクルードしようとしていますが、インクルード パスには既に "boost" が含まれています。ライブラリが /usr/include/boost/boost をインストールする場合を除き、インクルード パスまたは #include 行から「boost」を削除する必要があります。#include <boost/container/list.hpp>私の好みは、ステートメント likeが よりもはるかに有益であるため、インクルード パスから削除することです#include <container/list.hpp>

于 2012-12-28T15:52:35.350 に答える