Sign in to follow this  
Followers 0
GlennNZ

Unity
sigslot.h with Visual Studio (compile issue)

7 posts in this topic

I'm trying to compile an app with the the sigslot.h included in (http://sigslot.sourceforge.net/). However, I'm under the impression the Visual Stuio 2008 EE doesn't like it very much.
Quote:
Error 6 error C2146: syntax error : missing ';' before identifier 'const_iterator' Error 9 error C2146: syntax error : missing ';' before identifier 'const_iterator' Error 7 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int Error 10 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
The closest I get to someone getting a solution to this is here. http://www.gamedev.net/community/forums/topic.asp?topic_id=399191&forum_id=21&gforum_id=0 close but not close enough. Does anyone have the solution, or can offer another alternative that is as simple as what sigslot seems? (Not Boost please). Thanks.
0

Share this post


Link to post
Share on other sites
Line 419; the line that looks like:
typedef sender_set::const_iterator const_iterator;

I've also tried doing #define SIGSLOT_PURE_ISO
0

Share this post


Link to post
Share on other sites
I (OP in the thread you linked to) never managed to get that running. :(
0

Share this post


Link to post
Share on other sites
Thanks spookycat, that's it exactly.

I can now finally wire these GUI buttons up with something a bit more elegant than my existing code. (then back to figuring out how all those templates work.)

Thanks again.
0

Share this post


Link to post
Share on other sites
I'm running the risk of hijacking my own thread, but it seems that it isn't just VS 2008 EE that doesn't like Sarah's sigslot code. g++ (linux and mac) also doesn't like it, but I suspect for different reasons.

However, I noticed that if I use code from an article at code project (http://www.codeproject.com/KB/cpp/CppEvents.aspx), I get similar compile problems. Unfortunately my knowledge of templates and why they would cause such issues is beyond me, hence why I'm here.


The error is relating to what the std::map contains, which is more templated code.

Quote:

sigslot_test.h: In member function ‘bool CppEvent1<ReturnT, ParamT>::detach(CppEventHandler)’:
sigslot_test.h:58: error: expected `;' before ‘it’



The code looks like the following.



#include <iostream>
#include <map>
using namespace std;

typedef int CppEventHandler;

template <typename ReturnT, typename ParamT>
class EventHandlerBase1
{
public:
virtual ReturnT notify(ParamT param) = 0;
};

template <typename ListenerT, typename ReturnT, typename ParamT>
class EventHandler1 : public EventHandlerBase1<ReturnT, ParamT>
{
typedef ReturnT (ListenerT::*PtrMember)(ParamT);
ListenerT* mObject;
PtrMember mMember;

public:
EventHandler1(ListenerT* object, PtrMember member) : mObject(object), mMember(member)
{

}

ReturnT notify(ParamT param)
{
return (mObject->*mMember)(param);
}
};


template <typename ReturnT, typename ParamT>
class CppEvent1
{
typedef std::map<int, EventHandlerBase1<ReturnT, ParamT> *> HandlersMap;
HandlersMap mHandlers;
int mCount;

public:
CppEvent1() : mCount(0)
{
}

template <typename ListenerT>
CppEventHandler attach(ListenerT* object, ReturnT (ListenerT::*member)(ParamT))
{
typedef ReturnT (ListenerT::*PtrMember)(ParamT);
mHandlers[mCount] = (new EventHandler1<ListenerT, ReturnT, ParamT>(object, member));
mCount++;
return mCount-1;
}

bool detach(CppEventHandler id)
{
HandlersMap::iterator it = mHandlers.find(id);
if (it == mHandlers.end())
return false;

delete it->second;
mHandlers.erase(it);
return true;
}

ReturnT notify(ParamT param)
{
HandlersMap::iterator it = mHandlers.begin();
for (; it != mHandlers.end(); it++)
{
it->second->notify(param);
}
return true;
}


};



int main()
{
cout << "hello and welcome to yet another coding adventure\n";
}


I know there are other sigslot libraries out there, (like http://s11n.net/sigslot/) but it would be nice to know the solution to this compile issue.

Cheers.
0

Share this post


Link to post
Share on other sites
As a follow up; courtesy of one of the guys at forums.devshed.com, I have a solution.

I should have added typename before HandlersMap::iterator it = mHandlers.find(id);
so that I get
typename HandlersMap::iterator it = mHandlers.find(id);

and
typename HandlersMap::iterator it = mHandlers.begin();


The devshed link is [url=http://forums.devshed.com/c-programming-42/template-issue-with-signals-and-slots-603844.html#post2243403]here[/url]
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0