boost/type_traits/arithmetic_traits.hpp:243: template instantiation depth exceeds maximum of 17 boost/type_traits/arithmetic_traits.hpp:243: (use -ftemplate-depth-NN to increase the maximum)エラーメッセージの言うように template 実体化の深さを増やす必要がある。 普通は g++ に -ftemplate-depth-30 フラグを渡すことでうまくいく。
error C2784: 'T __cdecl source(struct std::pair,const G &)' : could not deduce template argument for 'struct std::pair<_T1,_T1>' from 'class boost::detail::bidir_edge '
VC++ は Koenig Lookup をサポートしていないので、 boost:: を使って boost 名前空間で定義された関数を 参照する必要がある。つまり、 source(e, g) ではなく boost::source(e, g) とする。
../../..\boost/property_map.hpp(283) : error C2678: binary '[' : no operator defined which takes a left-hand operand of type 'const struct boost::adj_list_edge_property_map,unsigned int,enum boost::edge_weight_t>' (or there is no acceptable conversion)
get(property, graph, edge) を使う際に見られる VC++ のバグ。 回避策は、代わりに get(get(property, graph), edge) を使うことである。
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1786)
このエラーには多くの原因があり得るが、時々、 /Gm (最小リビルド) フラグ が原因で起こることがある。 このフラグが本当に必要でないのなら、オフにするのは良い考えである。
このエラーの他の原因に、 BGL アルゴリズムの多くで使われている 名前付きパラメータ インタフェース (named-parameter interface) がある。 名前無しパラメータ (non named-parameter) 版のアルゴリズムを代わりに試してみて 欲しい (当該アルゴリズムの HTML ドキュメントを参照) 。
また別の理由としては、 PropertyGraph インタフェースの get() 関数の利用が挙げられる。 複雑な式で get() 関数を使う代わりに、常にまずプロパティマップ変数を最初に宣言する ようにすること:
property_map<graph_t, edge_weight_t>::type w_map = get(edge_weight, g); // w_map を使う ...
V:\3rdPARTY\SXL\INCLUDE\xlocnum(309) : error C2587: '_U' : illegal use of local variable as default parameter
Andreas Scherer による回避方法:
これは MSVC-- 6.0 sp[34] で BGL の例のいくつかを(それとも全部?)コンパイルする
際によく起こる問題だ。
DLL バージョンの run-time システムを使うことはできない。
僕は ``[Debug] Multithreaded'' (``Project Settings`` の ``C/C++'' ページの
``Code Generation'' セクションにある) に切り替えたら file_dependencies.cpp を
コンパイルできた。
このエラーのもう一つの原因は adjacency_list のイテレータコンストラクタが 使われたことである。 回避策は、代わりに add_edge() を使うこと。 例えば:
Graph g(edge_array, edge_array + n_edges, N);これは以下のように置き換える:
Graph g(N); for (std::size_t j = 0; j < n_edges; ++j) add_edge(edge_array[j].first, edge_array[j].second, g);
Copyright © 2000-2001 |
Jeremy Siek,
Indiana University (jsiek@osl.iu.edu) Lie-Quan Lee, Indiana University (llee@cs.indiana.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu) |
Japanese Translation Copyright © 2003 Kent.N
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。