event above is a pointer so I'm guessing you probably wanted event->data1, but perhaps you're also missing a header include or something?
The method is probably non-static so it has an implicit signature more like (Type * this, ALLEGRO_USER_EVENT * event). Normally you'd need an object instance to invoke that properly. My guess is that's what the compiler is complaining about.
It might work if you explicitly mark the method as static, which basically is like a global function that is just namespaced by the class. You may or may not have to qualify it with the type name: Type::method.
The main thing is you need to make sure that you don't store references to that object anywhere else. If you do need references elsewhere then you'll need to abstract the interface more so that you can signal that elsewhere to forget about the object too. That sounds to me like you don't actually want Allegro to clean up after itself with that data, but perhaps you'd still like to use Allegro's API to flag the object somehow (i.e., obj->alive = false) for later.
Or perhaps you can get away with smart pointers as I originally suggested if C is never going to access the data at all. You would pass a pointer to a smart pointer, not to the object, and then destroying the smart pointer would handle other instances of the underlying object properly... But that's kind of silly in a way mixing smart pointers with manual memory management. Append: Of course, then you'd have to allocate the smart pointer with new so that it doesn't destruct when leaving the scope of its origin, and I'm not sure if there are rules about not doing that... I recall smart pointers being particular.