'No matching function for call' error when inserting class into a STL map

c++, dictionary, std, stl

Solution

You have a pointer to a map containing `Foo` values

std::map<unsigned int, Foo> *m_mapFoo;

and you are treating it as if it contained `Foo` pointer values:

std::map<unsigned int, Foo*> *m_mapFoo;

Try this:

m_mapFoo = new std::map<unsigned int, Foo>;
m_mapFoo->insert(std::make_pair(0, Foo(0)));
m_mapFoo->insert(std::make_pair(1, Foo(1)));

As for the second error, you have a pointer to a map, so you need

std::map<unsigned int, Foo>::iterator it = m_mapFoo->find(0);
if (it) {
  it->second.someFunctionIntoFooClass();
} else {
  // entry not found
}

Problem

I have a STL map in C++ where the key is an unsigned int, and the value is a class whose constructor is: ``` Foo::Foo(unsigned int integerValue){ //Some stuff } ``` At other class I have declarated the std::map at the header: ``` private: std::map<unsigned int, Foo> *m_mapFoo; ``` And at the cpp file I created it and inserted instances of Foo: ``` m_mapFoo = new std::map<unsigned int, Foo>; m_mapFoo->insert(0, new Foo(0)); m_mapFoo->insert(1, new Foo(1)); ``` But I'm getting the following error at the insert methods: ``` no matching function for call to ‘std::map<unsigned int, Foo, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, Foo> > >::insert(const unsigned int&, Foo*)’ ``` Similar problem at find method: ``` m_mapFoo.find(0)->second->someFunctionIntoFooClass(); ``` Where the error is exactly the following: ``` request for member ‘find’ in ‘((Foo*)this)->Foo::m_mapGeoDataProcess’, which is of non-class type ‘std::map<unsigned int, Foo, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, Foo> > >*’ ``` Additional notes: I don't have a Foo copy constructor, but I don't think that's the problem. Any help understanding this errors?

Original source

Related problems