programatorske: g++ bug? alebo moja blbost

iko iko na kamarad.cz
Pátek Listopad 16 10:50:20 CET 2001


zdravim...

uz treti den nad tym sedim a neviem co s tym. mam dve triedy (cButton, cA). V triede cButton mam pointer na funkciu a v triede cA nastavujem do toho pointra (v cButton) funkciu triedy cA. Funkcia ma aj nejake parametre. Najprv som mal dva parametre (void *, int). Chodili mi tam ale bludy. Tak som zacal experimentovat a zistil som, ze vo volani (*prnt)(0, a1, a2, a3, a4); sa vlastne sa parametre posunu o jeden dolava, teda 0. Posledny parameter vo volanej funkcii je nejaky blud. Prvy (ktory by mal byt 0) je vlastne druhy atd...

robim niekde nejaku blbost? toto je len taka simulacia mojho problemu...ak sa to da inak (callback tu pouzit jaksi nemozem) rad sa poucim..

a dakujem za kazdy nazor na to...

egcs 2.91.66
kernel 2.2.14-6.0.1

#include <stdio.h>

class cButton {
  public:
    void(*prnt)(int, int, int, int, int); stdcall;
    void click(int a1, int a2, int a3, int a4);
};

void cButton::click(int a1, int a2, int a3, int a4) {
  (*prnt)(0, a1, a2, a3, a4);
}

class cA {
  public:
    cButton *But;
    void prnt(int a0, int a1, int a2, int a3, int a4);
    void set();
    void c();
};

void cA::prnt(int a0, int a1, int a2, int a3, int a4) {
  printf("a0: %d\na1: %d\na2: %d\na3: %d\n", a0, a1, a2, a3);
}

void cA::set() {
  But->prnt=(void (*)(int, int, int, int, int))prnt;
}

void cA::c() {
  But->click(11, 16, 23, 56);
}

main() {
  cA a;

  a.But=new cButton;
  a.set();
  a.c();
}



Další informace o konferenci Linux