2012-01-05 7 views
0

これまで、私はテンプレートとC++での動的バインディングの両方を使用していましたが、最近はそれらを一緒に使用しようとしましたが、コンパイルできませんでした。動的バインディングクラスでのC++テンプレートの使用

 std::map<MyClass, unsigned int> mymap; 

MyClassのは、バインディングの動的メモリを利用したクラスであることを起こる:私が何をしようとしています何

はこのようなものです。数時間の検索の後、私はこれがまだ解決できない影響を与えているという印象を受けているので、問題のガイダンスと解決方法を期待していました。

私の最終目標は、このような何かを行うことができるようにすることです:

std::vector<MyClass> MyClassPool; 
//fill the vector with MyClass objects... 
for(usigned int i=0 ; i<MyClassPool.size() ; i++) 
{ 
    mymap[ MyClassPool[i] ] = i; 
} 

私はさまざまな方法でポインタを使用して試してみましたが、それは働いていないと私は何ができるのか確認するために失敗します。

私は、上記と次のエラーを取得:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h: In member function `bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Instance]': 

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_map.h:338: instantiated from `_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = Instance, _Tp = float, _Compare = std::less<Instance>, _Alloc = std::allocator<std::pair<const Instance, float> >]' 

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h:227: error: no match for 'operator<' in '__x < __y' 
+2

"ダイナミックメモリバインディング"とはどういう意味ですか?とにかく、コードが正しいように見えます。あなたは私たちに 'MyClass'の定義を与える必要があります。 –

+0

あなたは 'ベクトル'の代わりに 'ベクトル'を意味しませんでしたか?標準の組み込み 'std :: vector'を使用していますか? –

+1

「それは機能していません」とはどういう意味ですか?あなたは私たちにより良い情報を与えなければなりません。それはコンパイルされますか?どのようなエラーメッセージが表示されますか?奇妙なことに私はライブラリに私を誘導するコンパイルエラーが発生する。 –

答えて

1

あなたはMyClassためoperator<を提供していません。 std::mapが必要です。 2つのオプションがあります。第3のテンプレート引数としてコンパレータをmapに指定するか、演算子をMyClassに実装します。

0

これは「動的バインディング」とは何の関係もありません。あなたのクラスはマップに入れる命令を持っている必要があります。オペレータ<が必要です。

+0

1つの試みで、オーバーロードされた演算子<の必要性について言及したエラーに気付きました。あなたは詳しく説明できますか? – jathanasiou

+1

MyClassクラスのメソッドとして 'bool MyClass :: operator <(MyClass const&other){/ *あなたのクラスを比較したい* /}'と書いてください。 "しかし"の部分はあなた次第ですが、 'operator <'の基本的な順序の要件に従うものでなければなりません。 – ex0du5

2

このコンパイルエラーは、Instanceに対してoperator <が定義されていないことを意味します。 mapはキーをソートできる必要があり、この機能が必要です。 operator <を定義しない場合は、mapの3番目のテンプレートパラメータとして比較関数を指定する必要があります。つまり、std::map<Instance, float, compare_instances>です。

...考えてみると、Instanceをキーに使用し、floatをデータとして使用したいと思いますが、それ以外の方法はありませんか?私。マップでInstanceを検索すると、floatが返されますか?

+0

はい、正しいです。インスタンスクラスをキーとして使用する必要があります。 – jathanasiou

関連する問題