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

Как сделать функцию от указателя на класс и указателя на метод? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации) http://www.cyberforum.ru/cpp-beginners/thread1633408.html
Почему во многих учебниках функции-члены класса внутри класса только объявляют, но определяют вне самого класса (не, ну как бы в классе, но вне) пример ниже class C { int func(int n);// о,]объявляем } // дальше "выходим" из класса и определяем int C::func(int n){return n+1;} почему не определить сразу в классе?
C++ Сортировка по алфавиту #include <iostream> #include<cstring> using namespace std; int main() { int i,j,s=1,k=0,space=0,n; char str,str1; cout<<"Введите слова: "; gets(str1); http://www.cyberforum.ru/cpp-beginners/thread1633397.html
C++ Вычислить сумму чисел в текстовой строке
Ввести символьную строку, содержимое которой – несколько целых чисел. Вычислить сумму этих чисел. Строку и полученную сумму вывести на экран.
Обменять элементы главной диагонали заданной квадратной матрицы, с элементами её первого столбца C++
Составить программу обмена в матрице A элементов, находящихся на главной диагонали, с соответствующими элементами первого столбца.
C++ Компиляция в g++ из MinGW http://www.cyberforum.ru/cpp-beginners/thread1633359.html
Добрый день! После скачивания и установки MinGW пытаюсь скомпилировать простую программу из разряда Hello, World! Набирая в командной строке g++ hello.cpp -o hello.exe получаю сообщение об ошибке g++: fatal error: -fuse-linker-plugin, but liblto_plugin-0.dll not found compilation terminated Запускаю: g++ -print-search-dirs в ответ получаю
C++ STL, что такое iterator? Взываю о помощи ко всему прогрессивному человечеству, Что это: vector<float>::iterator iter; подробнее

Показать сообщение отдельно
xlxndr
 Аватар для xlxndr
56 / 8 / 3
Регистрация: 14.06.2013
Сообщений: 115
07.01.2016, 15:18     Как сделать функцию от указателя на класс и указателя на метод?
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю, дабы модифицировать эту функцию для возможности работы с массивами экземпляров класса, а не просто с одним экземпляром класса.

В 27-ой строке обычное обращение (ptTest->*ptMethod)(); работает, а вот внутри функции TestFunc (14-я строка) почему-то то же самое не работает!
Кто-нибудь знает почему и как это исправить?...

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
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
 
class Test
{public:
     void foo()
     {cout << "Test::foo called" << endl;}
};
 
//объявляем тип указателя:
typedef void (Test::* pToFunc)();
 
//определим функцию от указателя на класс и от указателя на метод класса:
void TestFunc(Test* clink, pToFunc TFunc)
{
    (clink -> *TFunc)();
};
 
int main()
{
    //создаём объект этого типа и инициализируем его:
    pToFunc ptMethod = &Test::foo;
 
    Test  test;
    Test *ptTest = &test;
    //обратимся к методу напрямую:
    (ptTest->*ptMethod)();
 
    //обратимся с помощью функции
    TestFunc(ptTest,ptMethod);
 
    cin.get();
    return 0;
}
Пишет ошибку "error: expected unqualified-id before '*' token"....
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru