====== C and C++ Signatures ======
//(A question was asked regarding using a C++ method instead of a C function for use in a C callback.)//
I'm going to go off memory here, I'm pretty sure this is correct but
forgive me if it isn't 100%.
>error C2664: 'glutIdleFunc' : cannot convert parameter 1 from 'void (void)' to 'void (__cdecl *)(void)' \\
> None of the functions with this name in scope match the target type
> glutIdleFunc(display); \\
> void Assignment_1bv2::display()
Declare your assignment display method in your class as static, or
create C-style callbacks (that can then call your class), like so:
void cstyledisplay()
{
myclass.display();
}
glutIdleFunc(cstyledisplay);
Where myclass is your global instance.
Or a static that calls the global instance...
class assignment2
{
public:
static void cstyledisplay()
{
myclass.display();
}
void display()
{
...
}
};
Where myclass is your global instance.
This is typically how you would implement C and C++ interaction in real world applications, so it's a pretty common practice.
> I'm not sure how to troubleshoot this, since putting everything in one cpp file doesn't give me this error.
I'm willing to bet that this is unrelated; you've gone from C functions to C++ methods. They have different signatures. Even if you were to use a type cast in the function call(don't), it wouldn't work (and would likely crash) because non-static C++ methods still have a "this" pointer on the stack, whereas C functions don't.
--- //[[tjgrant@tatewake.com|Terence J. Grant]] 08/31/2006 09:58//