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

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

Войти
Регистрация
Восстановить пароль
 
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
#1

Аргумент функции - указатель на метод класса - C++

14.11.2013, 00:54. Просмотров 410. Ответов 8
Метки нет (Все метки)

Здравствуйте.
Содержание задания - написать программу, создающую копию выбранного пользователем файла при помощи n-го кол-ва потоков (среда разработки "VS 2012").
Написание программы процедурным методом не вызвало ни каких трудностей. Но вот при написании её же при помощи классов... Суть вопроса в том, что при попытке передать метод класса в виде одного из аргументов в ф-цию CreateThread() - генерирует ошибку (вот ссылка на эту ошибку http://msdn.microsoft.com/ru-ru/libr...v=vs.120).aspx ).
Подскажите, пожалуйста, как справиться с моей "заминкой".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Threed{
private:
....
public:
DWORD  WINAPI copyFile(); //вот этот метод
void inThreed()
...
};
 
DWORD WINAPI Threed::copyFile() { 
... 
}
 
...
 
void Threed::inThreed() {
    hThreadsArray[step] = CreateThread(NULL,NULL, this->copyFile, NULL, NULL, NULL);
}
Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2013, 00:54     Аргумент функции - указатель на метод класса
Посмотрите здесь:

C++ Получить указатель на объект который вызвал метод или Функцию в теле самой функции
C++ Указатель на метод и на поле класса
Указатель на метод класса! C++
C++ Указатель на метод класса (ошибка)
C++ Указатель на метод класса
C++ Как получить значение из метода класса, если метод возвращает указатель?
Указатель на функцию с аргументами, как аргумент другой функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12892 / 7278 / 811
Регистрация: 27.09.2012
Сообщений: 17,978
Записей в блоге: 2
Завершенные тесты: 1
14.11.2013, 01:08     Аргумент функции - указатель на метод класса #2
Можете сделать её статической.
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
14.11.2013, 01:14  [ТС]     Аргумент функции - указатель на метод класса #3
Ок. Попробую.
Croessmah
Модератор
Эксперт CЭксперт С++
12892 / 7278 / 811
Регистрация: 27.09.2012
Сообщений: 17,978
Записей в блоге: 2
Завершенные тесты: 1
14.11.2013, 01:16     Аргумент функции - указатель на метод класса #4
У функций членов есть же неявный параметр, у статических его нет.
Но естественно, что у статических функций нет привязки к объекту
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
14.11.2013, 09:02  [ТС]     Аргумент функции - указатель на метод класса #5
Но сделав этот метод статическим - я "потерял" доступ к не статическим полям класса (т.е. то, о чем Вы и говорили).
castaway
Эксперт С++
4880 / 3016 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
14.11.2013, 10:37     Аргумент функции - указатель на метод класса #6
Для этого существует параметр потока.
C++
1
2
3
4
5
6
7
8
static DWORD WINAPI Threed::copyFile( LPVOID lpParam ) { 
    Threed * p_thread = (Threed *)lpParam;
    p_thread->член_или_метод класса
}
 
void Threed::inThreed() {
    hThreadsArray[step] = CreateThread(NULL,NULL, this->copyFile, (LPVOID)this, NULL, NULL);
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.11.2013, 14:35     Аргумент функции - указатель на метод класса #7
castaway, Я конечно может чего-то не понимаю... Но с чего вдруг this->copyFile?
C++
1
hThreadsArray[step] = CreateThread(NULL,NULL, &Threed::copyFile, (LPVOID)this, NULL, NULL);
castaway
Эксперт С++
4880 / 3016 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
14.11.2013, 15:06     Аргумент функции - указатель на метод класса #8
ForEveR, да, он тут конечно не нужен. Просто я скопировал код из 1-го поста. Тут можно просто указать copyFile.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2013, 00:13     Аргумент функции - указатель на метод класса
Еще ссылки по теме:

Указатель на метод класса C++
Шаблон класса двусвязного списка, метод, возвращающий указатель C++
C++ Как вернуть из функции указатель на массив элементов класса
C++ Указатель массива как аргумент функции
Как сделать указатель/ссылку на метод конкретного экземпляра класса C++

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

Или воспользуйтесь поиском по форуму:
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
16.11.2013, 00:13  [ТС]     Аргумент функции - указатель на метод класса #9
Спасибо, Друзья!
Рабочий вариант:
C++
1
2
3
4
5
6
7
8
static DWORD WINAPI Threed::copyFile( LPVOID lpParam ) { 
    Threed * p_thread = (Threed *)lpParam;
    p_thread->член_или_метод класса
}
 
...
 
hThreadsArray[step] = CreateThread(NULL,NULL, &Threed::copyFile, (LPVOID)this, NULL, NULL);
Yandex
Объявления
16.11.2013, 00:13     Аргумент функции - указатель на метод класса
Ответ Создать тему
Опции темы

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