• Advertisement
Sign in to follow this  

Difficulty exposing operator << of object to angelscript

This topic is 1653 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

SOLVED. No need to read


I have Packet class which I use and I would like to  expose it to angelscript.
It overloads >> and << for a couple different types like bools, int's, floats.

This class is defined like this.

class Packet
public :
    Packet& operator <<(Int32               data);

I have tried overloading just for the method above as a test. With the following code.

r = engine->RegisterObjectMethod("Packet", "Packet opShl(int data)", asMETHODPR(Packet, operator<<,(Int32),Packet&), asCALL_THISCALL); assert( r >= 0 );

which with the code below causes a crash and printing out the integer value passed into the method is different to the 55 sent in

Packet packet;
int intVal = 55;
packet << intVal ;


Now that I am writing this I think it is because i tried to set this up as a angelscript value type. Because packet is actually from the sfml library and I do not really want to be adding reference counting to that class and I was happy with a copy being made when used in scripts. Here is the setup of the type. Though I still can not understand why the function call can output text and print out the passed in integer except incorrectly. I thought that would be the only thing that works and the invalid pointer for the packet or what ever would be the only issue(and probably is the reason it does crash). 

	// Register the packet type
	r = engine->RegisterObjectType("Packet", sizeof(Packet), asOBJ_VALUE | asOBJ_APP_CLASS_CDK); assert( r >= 0 );

	// Register the object constructor and destructor
	r = engine->RegisterObjectBehaviour("Packet", asBEHAVE_CONSTRUCT,  "void f()",                    asFUNCTION(ConstructPacket), asCALL_CDECL_OBJLAST); assert( r >= 0 );
	r = engine->RegisterObjectBehaviour("Packet", asBEHAVE_CONSTRUCT,  "void f(const Packet &in)",    asFUNCTION(CopyConstructPacket), asCALL_CDECL_OBJLAST); assert( r >= 0 );
	r = engine->RegisterObjectBehaviour("Packet", asBEHAVE_DESTRUCT,   "void f()",  

Anyway I am really tired and have a huge headache. I am currently all out of ideas and need to sleep.

Any ideas or help is much appreciated.


So I have had a big sleep and tried a few things and I managed to figure it out. I feel really stupid about this

i had "Packet opShl(int data)" instead of "Packet &opShl(int data)"

Now the thing is I had tried that and still got errors before. Though I clearly must had had added another error somewhere else at the same time. ><

Anyway it is all fixed now. Sorry for the waste of your time

Edited by greeniekin

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement