class myclass {
Public:
void (*onget)(char *);
void doit(){
(*onget)("PROVERKA");
}
};
void MyFunc(char s[30])
{
printf("%s",s);
}
int main(......)
{
myclass a;
a.onget = &MyFunc;
a.doit();
}
Проблема с указателем на функцию
Код:
Вот так все работает прекрасно...
но если объявлять указатель на класс
Код:
int main(......)
{
myclass *a;
a->onget = &MyFunc; // На этой строке программа обрывается с ошибкой
a->doit();
}
{
myclass *a;
a->onget = &MyFunc; // На этой строке программа обрывается с ошибкой
a->doit();
}
типа не могу прочитать с адреса 0x00000001
Подскажите в чем проблема. Спасибо
только что скопировал твой код и все прекрасно работает в обоих случаях.
Код:
int main(......)
{
myclass *a; // тут у тебя объявляется указатель на класс
a->onget = &MyFunc; // На этой строке программа обрывается с ошибкой
a->doit();
}
{
myclass *a; // тут у тебя объявляется указатель на класс
a->onget = &MyFunc; // На этой строке программа обрывается с ошибкой
a->doit();
}
В твоем коде я не увидел объявление экземпляра класса. Т.е. внутри указателя у тебя в принципе может быть любой мусор.
попробуй так, если тебе обязательно надо работать с указателем:
Код:
int main(......)
{
myclass *b;
mycalss a;
b = &a;
b->onget = &MyFunc;
b->doit();
}
{
myclass *b;
mycalss a;
b = &a;
b->onget = &MyFunc;
b->doit();
}
или так, если достаточно одного объекта класса:
Код:
int main(......)
{
mycalss a;
a.onget = &MyFunc;
a.doit();
}
{
mycalss a;
a.onget = &MyFunc;
a.doit();
}
Код:
myclass *a;
выделить память под него:
Код:
a = new myclass;
Объект, свойству которого присваивается указатель на функцию не существует, а указатель на объект является неопределённым.
Код:
function (....)
{[INDENT]myclass *a = new myclass(); // Создание объекта в куче
a->onget = &MyFunc; a->doit();a->onget = &MyFunc;
a->doit();
delete a; // Удаление объекта из кучи[/INDENT]}
{[INDENT]myclass *a = new myclass(); // Создание объекта в куче
a->onget = &MyFunc; a->doit();a->onget = &MyFunc;
a->doit();
delete a; // Удаление объекта из кучи[/INDENT]}
Вот так правильно. WWTLF, учи "выделение памяти"
под класс надо выделять память = new myclass();
иначе указатель показывает на что попало....