Hi,
I'm getting this error when I'm calling a member function of an object in a std::map.
I have a BaseApplication class that has these member variables:
std::string m_curState;
std::map<std::string, BaseState*> m_mapGameStates;
Then I have a derived class SDLApplication which has these member funtions
void SDLApplication::update() {
if(m_mapGameStates.find(m_curState) != m_mapGameStates.end()) {
m_mapGameStates[m_curState].update(this);
}
}
void SDLApplication::render() {
if(m_mapGameStates.find(m_curState) != m_mapGameStates.end()) {
m_mapGameStates[m_curState].render(this);
}
}
void SDLApplication::handleEvents() {
if(m_mapGameStates.find(m_curState) != m_mapGameStates.end()) {
m_mapGameStates[m_curState].handleEvents(this);
}
}
The compiler error:
/home/zeeli/Development/shmup/src/sdlapplication.cpp:67: error: request for member 'update' in '((SDLApplication*)this)->SDLApplication::<anonymous>.BaseApplication::m_mapGameStates.std::map<_Key, _Tp, _Compare, _Alloc>::operator[] [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = BaseState*, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, BaseState*> >](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)(&((SDLApplication*)this)->SDLApplication::<anonymous>.BaseApplication::m_curState))))', which is of non-class type 'BaseState*'
/home/zeeli/Development/shmup/src/sdlapplication.cpp:70: error: no matching function for call to 'std::exception::exception(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/usr/include/c++/4.3/exception:59: note: candidates are: std::exception::exception()
/usr/include/c++/4.3/exception:57: note: std::exception::exception(const std::exception&)
/home/zeeli/Development/shmup/src/sdlapplication.cpp: In member function 'virtual void SDLApplication::render()':
compiling shmup.cpp (g++)
/home/zeeli/Development/shmup/src/sdlapplication.cpp:78: error: request for member 'render' in '((SDLApplication*)this)->SDLApplication::<anonymous>.BaseApplication::m_mapGameStates.std::map<_Key, _Tp, _Compare, _Alloc>::operator[] [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = BaseState*, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, BaseState*> >](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)(&((SDLApplication*)this)->SDLApplication::<anonymous>.BaseApplication::m_curState))))', which is of non-class type 'BaseState*'
/home/zeeli/Development/shmup/src/sdlapplication.cpp:81: error: no matching function for call to 'std::exception::exception(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/usr/include/c++/4.3/exception:59: note: candidates are: std::exception::exception()
/usr/include/c++/4.3/exception:57: note: std::exception::exception(const std::exception&)
/home/zeeli/Development/shmup/src/sdlapplication.cpp: In member function 'virtual void SDLApplication::handleEvents()':
/home/zeeli/Development/shmup/src/sdlapplication.cpp:89: error: request for member 'handleEvents' in '((SDLApplication*)this)->SDLApplication::<anonymous>.BaseApplication::m_mapGameStates.std::map<_Key, _Tp, _Compare, _Alloc>::operator[] [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = BaseState*, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, BaseState*> >](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)(&((SDLApplication*)this)->SDLApplication::<anonymous>.BaseApplication::m_curState))))', which is of non-class type 'BaseState*'
/home/zeeli/Development/shmup/src/sdlapplication.cpp:92: error: no matching function for call to 'std::exception::exception(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
Can anyone explain what's the deal with this?
Best regards,
zEeLi