🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

[C++] error request for member which is of non-class type *SOLVED*

Started by
1 comment, last by zeeli 14 years, 10 months ago
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
Advertisement
It looks like you're using a . when you should be using a ->
Oh my god, of course! Thanks mate!

This topic is closed to new replies.

Advertisement