2009-08-03 8 views
1

以下のように挿入できないのはなぜですか?C++マップはペアで挿入できません

#include <map> 

struct something { 

} some_object; 

typedef std::map<std::string, something*> list; 
typedef std::pair<std::string, something*> pair; 

int main() 
{ 
    list l; 
    pair p("abc", &some_object); // working fine!!! 
    l.insert(p); // 17 errors 

    return 0; 
} 

ビジュアルスタジオは私に多くのエラーをもたらし、私はそれらの何かを理解しません。最初の1つは:

error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string' 

私はもっと投稿できますが、私はここにスパムしたくありません。あなたの助けに感謝します。あなたは実装の詳細に中継されている

typedef std::pair<std::string, something*> pair; 

+0

あなたは私のペットの憎しみに「can not」ではなく「cant」を使用してヒットしました。 "cant"はそれ自体の言葉であり、できないものとは全く異なる意味を持っています:http://dictionary.reference.com/browse/cant –

答えて

3

は、私はこの行を変更します

#include <string> 
+0

うわー...とても速くて、愚かな間違い..私はこの間違いを認識しませんでした..しかし、なぜこの単純なことのために17のエラーがありますか? :S –

+0

std :: stringへの他の参照をコンパイルする前に、コンパイルするともっと驚いています。 –

+0

テンプレートエラーがカスケードします。文字列上の演算子 GManNickG

1

する必要があります。ライブラリの今後のすべてのバージョンでこのことが常に正しいと確信していますか?そのようなコードをしっかりと結合することは悪い考えです。

はこれを試してみてください:

typedef list::value_type pair; 

PS。 'list'は、グローバル名前空間に入れた型の名前のための私の最初の選択ではありません。あなた自身の名前空間に入れるか、それを 'MyList'と呼んでください。

関連する問題