From: "A. Sinan Unur" Newsgroups: comp.os.msdos.djgpp Subject: JPTUI Question Date: Tue, 03 Dec 1996 07:45:02 -0500 Organization: Cornell University Lines: 134 Sender: asu1 AT cornell DOT edu (Verified) Message-ID: <32A420CE.6006@cornell.edu> NNTP-Posting-Host: cu-dialup-0084.cit.cornell.edu Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp i recently downloaded jptui and i am trying to use to build the user interface of one of my programs. i also thought it would be a good way to finally venture into c++. (i have some knowledge of c++, mainly through doing examples in books, but so far i have been to lazy to do anything of my own.) anyway, the following question probably reflects my ignorance more than anything else. in the program, i would like to keep track of a group of "button-like" entities and, when needed, provide a visual version. a cut down version of my "solution" is below. Essentially, i want this class to provide a common callback for all the buttons in the group. When i try to compile this, with , -Wall, -02 and -m486, i get the following message: layout.cc: In method `void ButtonArray::SetCallbacks()': layout.cc:63: bad argument 1 for function `void TPushButton::m_set_pressed_callback(void (*)(class TObject *, char *), char *)' (type was void (ButtonArray::)(class TObject *, char *)) i understand that the compiler does not see Pressed as an appropriate function pointer, but i am lost as to why not. any help will be most appreciated. sinan. /* * Layout.CC */ #include #include #include TApplication Layout(NONE); TWindow Main(DIALOG1, 1, 1, 65, 20, "Layout Test", INFO_BAR, NOT_MODAL); struct ButtonInfo { TPushButton *Button; int m_clicked_count; }; struct ButAttr { int rel_x; int rel_y; int width; char caption[16]; }; class ButtonArray { private : struct ButtonInfo *Info; int m_no_of_buttons; public : ButtonArray(PWindow parent, int no_of_buttons, struct ButAttr *PButAttr) { m_no_of_buttons = no_of_buttons; Info = new struct ButtonInfo[m_no_of_buttons]; for ( int i = m_no_of_buttons; i; i--) { (Info+i)->m_clicked_count = 0; (Info+i)->Button = new TPushButton(parent, PButAttr->rel_x, PButAttr->rel_y, PButAttr->width, PButAttr->caption); PButAttr++; } } void Pressed(PObject sender, char *) { char caption[16]; struct ButtonInfo *p = Info; for (int i = m_no_of_buttons; i; i--) { if ( p->Button == sender ) break; p++; } sprintf(caption, "%i", ++(p->m_clicked_count)); (p->Button)->m_set_caption(caption); } void SetCallbacks(void) { for ( int i = m_no_of_buttons; i; i--) ((Info+i)->Button)->m_set_pressed_callback(Pressed, ""); } ~ButtonArray(void) { for (int i = m_no_of_buttons; i; i--) delete ((Info+i)->Button); delete [] Info; } }; void Quit(PObject, char*) { JPStop(); } int main(int argc, char *argv[]) { JPInit(); struct ButAttr BAttr[24]; for( int i = 0; i < 3 ; i++) for( int j = 0; j < 8 ; j++) { int t = i*8+j; BAttr[t].rel_x = 2 + j*7; BAttr[t].rel_y = 5 + i*3; BAttr[t].width = 6; strcpy(BAttr[t].caption, "0"); } ButtonArray BArr(&Main, 24, BAttr); BArr::SetCallbacks(); Main.m_set_close_button_pressed_callback(Quit, ""); Main.m_open(); JPRun(); return 0; } -- ******************************************************************* A. Sinan Unur WWWWWW |--O+O mailto:asu1 AT cornell DOT edu C ^ mailto:sinan AT econ DOT cit DOT cornell DOT edu \ ~/ http://www.bqnet.com/sinan/ *******************************************************************