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

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

Восстановить пароль Регистрация
 
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
14.11.2013, 00:54     Аргумент функции - указатель на метод класса #1
Здравствуйте.
Содержание задания - написать программу, создающую копию выбранного пользователем файла при помощи 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);
}
Заранее благодарю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11809 / 6788 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
14.11.2013, 01:08     Аргумент функции - указатель на метод класса #2
Можете сделать её статической.
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
14.11.2013, 01:14  [ТС]     Аргумент функции - указатель на метод класса #3
Ок. Попробую.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11809 / 6788 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
14.11.2013, 01:16     Аргумент функции - указатель на метод класса #4
У функций членов есть же неявный параметр, у статических его нет.
Но естественно, что у статических функций нет привязки к объекту
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
14.11.2013, 09:02  [ТС]     Аргумент функции - указатель на метод класса #5
Но сделав этот метод статическим - я "потерял" доступ к не статическим полям класса (т.е. то, о чем Вы и говорили).
castaway
Эксперт С++
4838 / 2977 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.11.2013, 14:35     Аргумент функции - указатель на метод класса #7
castaway, Я конечно может чего-то не понимаю... Но с чего вдруг this->copyFile?
C++
1
hThreadsArray[step] = CreateThread(NULL,NULL, &Threed::copyFile, (LPVOID)this, NULL, NULL);
castaway
Эксперт С++
4838 / 2977 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 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++ Как получить значение из метода класса, если метод возвращает указатель?

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

Или воспользуйтесь поиском по форуму:
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
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     Аргумент функции - указатель на метод класса
Ответ Создать тему
Опции темы

Текущее время: 20:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru