Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
von_Manstein
17 / 17 / 0
Регистрация: 23.01.2011
Сообщений: 61
#1

Указатель на функцию - C++

14.02.2011, 21:12. Просмотров 1235. Ответов 11
Метки нет (Все метки)

Уже сломал всю голову, на что здесь может ругаться компилятор, выдавая такую ошибку?

main.cpp:23: error: invalid use of non-static member function ‘int Cat::GetAge()’

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using std::cout;
 
class Cat
{
    public:
    Cat(): itsAge(1) { HowManyCats++; cout << "Котов: " << HowManyCats; };
    ~Cat() { HowManyCats--; cout << "Котов: " << HowManyCats; };
    int GetAge() { return itsAge; };
        static int HowManyCats;
 
    private:
    int itsAge;
};
 
    int Cat::HowManyCats = 0;
 
int main()
{
        Cat Murzik;
        cout << Cat::HowManyCats;
    int (Cat::*AGE) ();
    AGE = Cat::GetAge;
    (Murzik.*AGE)();
    return 0;
}
Уже и так всё поупростил.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1636 / 1264 / 129
Регистрация: 21.12.2010
Сообщений: 1,925
Записей в блоге: 7
14.02.2011, 21:20     Указатель на функцию #2
getage д б вызвана для конкретного кота
von_Manstein
17 / 17 / 0
Регистрация: 23.01.2011
Сообщений: 61
14.02.2011, 21:25  [ТС]     Указатель на функцию #3
Тоже был вариант.
Но: (Murzik.*AGE)(); - вот вызвана для конкретного объекта.

Добавлено через 57 секунд
Или я вызвал неправильно?

Добавлено через 2 минуты
Еррор пишет на 23 строке. там где идёт присвоение. почему нельзя так присваивать?
Somebody
2780 / 1594 / 143
Регистрация: 03.12.2007
Сообщений: 4,179
Завершенные тесты: 1
14.02.2011, 21:30     Указатель на функцию #4
C++
1
AGE = &Cat::GetAge;
Преобразование функции в указатель не работает для функций - членов класса.
ValeryS
Модератор
6513 / 4979 / 460
Регистрация: 14.02.2011
Сообщений: 16,488
14.02.2011, 21:32     Указатель на функцию #5
Для того чтобы получить указатель на функцию или сделать функцию обратного вызова
необходимо ее объявить как статик
о чем тебе и написали
invalid use of non-static member function ‘int Cat::GetAge()’
^^^^^^^^^^^^
когда функция не объявлена статиком она может всообше не компилится компилится для каждого объекта т.е найти ее адрес до выполнения нереально
когда она объявлена как статик она гарантировано скомпилится в одном экземпляре и будет лежать по определенному адресу
правда все объекты будут обращатся к ней одной что чревато побочными эфектами
С уважением Валерий
von_Manstein
17 / 17 / 0
Регистрация: 23.01.2011
Сообщений: 61
14.02.2011, 21:36  [ТС]     Указатель на функцию #6
Цитата Сообщение от Somebody Посмотреть сообщение
C++
1
AGE = &Cat::GetAge;
Преобразование функции в указатель не работает для функций - членов класса.
Спасибо. Тупанул! Заработало. Та же логика как и с обычными переменными. что-то упустил...
Для того чтобы получить указатель на функцию или сделать функцию обратного вызова
необходимо ее объявить как статик
Нда? Нет, предложенный выше код работает. Статик вообще необязательное и не относящееся сюда условие. При чём оно тут?
ValeryS
Модератор
6513 / 4979 / 460
Регистрация: 14.02.2011
Сообщений: 16,488
14.02.2011, 21:43     Указатель на функцию #7
ну у борландо много чего работает что противоречит C++
von_Manstein
17 / 17 / 0
Регистрация: 23.01.2011
Сообщений: 61
14.02.2011, 21:44  [ТС]     Указатель на функцию #8
???? строка вывода из g++.
ValeryS
Модератор
6513 / 4979 / 460
Регистрация: 14.02.2011
Сообщений: 16,488
14.02.2011, 21:46     Указатель на функцию #9
main.cpp:23: error: invalid use of non-static member function ‘int Cat::GetAge()’
неправильное использование не статической функции
Это я придумал??? или компилятор тебе написал
С уважением Валерий
von_Manstein
17 / 17 / 0
Регистрация: 23.01.2011
Сообщений: 61
14.02.2011, 21:49  [ТС]     Указатель на функцию #10
Тогда у меня ступор, в этой книжке так написано))) Или я читать не умею чтоль...
ValeryS
Модератор
6513 / 4979 / 460
Регистрация: 14.02.2011
Сообщений: 16,488
14.02.2011, 21:56     Указатель на функцию #11
Все конечно хорошо но у меня нет такой книжки
ты бы цитату хоть бы привел.
С уважением Валерий
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2011, 21:58     Указатель на функцию
Еще ссылки по теме:

C++ Указатель на функцию
указатель на функцию C++
Указатель на функцию C++
Указатель на функцию C++
C++ Указатель на функцию

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
von_Manstein
17 / 17 / 0
Регистрация: 23.01.2011
Сообщений: 61
14.02.2011, 21:58  [ТС]     Указатель на функцию #12
Там идёт точно такое же присвоение, только функция Void. Она не возвращает значение, а выводит в консоль. Перепечатывал в копеечку. Ещё почитаю...
Yandex
Объявления
14.02.2011, 21:58     Указатель на функцию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru