[comp.windows.interviews] Callback Functions in 3.0b

chan@icsid2.comp (Pamela Chan) (06/24/91)

I'm a beginner in InterViews and I'm currently working with 
InterViews 3.0b. 

This is probably a silly question but I do want to know 
the answer....

I'm trying to associate a callback funtion with a simple 
push button. I was looking at the sample program <alert.c> 
in the standard distribution. It works fine if I assigned 
World::quit as the callback function, but anything else will 
generate a compiler error:

/////////////////////////////////////////////////////////
class TestButton {
 public:
    TestButton(){};
    ~TestButton(){};
    void Press(){
	fprintf (stderr, "Test button pressed\n");	
    };
};

declare(ActionCallback, TestButton)
implement(ActionCallback, TestButton)

Glyph* MakeControlPanelDialog(Font* f, Color* fg, TestButton* tbutton) {

   Button* button1 = new Button(

//   *******error occurs here**********
     new ActionCallback(TestButton) (&tbutton, TestButton::Press),

//   replace the above line with the following and it works fine
//   new ActionCallback(World) (world, World::quit),

     new ChoiceItem(
	  new Bevel(new Margin(new Label("Test", f, fg), 3.0),
		 new Outset(color)),
          new Bevel(new Margin(new Label("Test", f, fg), 3.0),
		 new Inset(color))
     )
   );

========================================================
"main.c", line 31: error: bad argument list for 
TestButton_ActionCallback::TestButton_ActionCallback() 
(no match against any  TestButton_ActionCallback::TestButton_ActionCallback())
1 error

/////////////////////////////////////////////////////

I'm not sure what's declare() and implement() and
I'm only following the example blindly.
Can anyone explain to me what's wrong with my callback function?
Thanks.


------------------------------------------------------------------------
Pamela Chan			International Computer Science Institute
chan@icsi.berkeley.edu 		1947 Center Street, Berkeley, CA

linton@marktwain.rad.sgi.com (Mark Linton) (06/24/91)

In article <CHAN.91Jun23132258@icsid2.comp>, chan@icsid2.comp (Pamela Chan) writes:
|> I'm trying to associate a callback funtion with a simple 
|> push button. I was looking at the sample program <alert.c> 
|> in the standard distribution. It works fine if I assigned 
|> World::quit as the callback function, but anything else will 
|> generate a compiler error:
|> 
|> Glyph* MakeControlPanelDialog(Font* f, Color* fg, TestButton* tbutton) {
|> 
|>    Button* button1 = new Button(
|> 
|> //   *******error occurs here**********
|>      new ActionCallback(TestButton) (&tbutton, TestButton::Press),
|> 
|> //   replace the above line with the following and it works fine
|> //   new ActionCallback(World) (&world, &World::quit),
|> 
|> "main.c", line 31: error: bad argument list for 
|> TestButton_ActionCallback::TestButton_ActionCallback() 
|> (no match against any  TestButton_ActionCallback::TestButton_ActionCallback())
|> 1 error

The problem is you pass ``&tbutton'' instead of ``tbutton''.  The constructor wants
a pointer to a TestButton (or more generally the callback receiver type).  The alert program
uses ``&world'' because world is declared as an object instead of a pointer.