0

Boost Geometry ライブラリの上にライブラリ コードを書いています。クラスは座標型 (通常は int/float/double など) でテンプレート化する必要があります。以下のコード (必要最小限にとどめたもの) はコンパイルされず、役に立たないコンパイル エラーが発生します。

コード:

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>

template <typename CoordType>
class MyClass {
public:
    typedef boost::geometry::model::point<CoordType, 2, boost::geometry::cs::cartesian> MyPoint;
    CoordType getX(const MyClass<CoordType>::MyPoint &p) const { return p.get<0>(); }
};

エラー:

test.cpp: In member function 'CoordType MyClass<CoordType>::getX(const MyClass<CoordType>::MyPoint&) const':
test.cpp:8:82: error: expected primary-expression before ')' token

このコードを次のようにコンパイルしています: g++ -I./boost_1_54_0 test.cpp -o test.o. G++ 4.5.2/4.7.2/4.8.1 の異なるバージョンを使用しましたが、それでも同じエラーが発生します。

ここで何が欠けていますか?前もって感謝します。

4

2 に答える 2

2

ブースト ドキュメントでboost::geometry::get<0>(p);推奨されている free 関数を使用すると、この問題を回避できます。

于 2013-09-22T15:58:03.367 に答える
0

us2012 の回答に同意します。boost::geometry::get<0>() を使用することをお勧めします。

実際の問題は、テンプレート キーワードが欠落していたため、次のようになります。

{ p を返します。テンプレートget<0>(); }

問題を修正したでしょう。

于 2013-09-23T18:38:39.323 に答える