Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Член класса как параметр 
:(
    Опции темы
_hunter
  Дата 24.6.2003, 14:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите как передать член класса как аргумент
  Вверх
vickr
Дата 24.6.2003, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.5.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата
Подскажите как передать член класса как аргумент

Код

class TheClass
{
...
public:
   int public_member;
...
};
void func(int n)
{
   ...
}
int main()
{
...
   TheClass class_inst;
   func(class_inst.public_member);
...
}

Или я чего-то не понял smile.gif.
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
_hunter
Дата 24.6.2003, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



упссс sad.gif
член класса - функция


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Baa
Дата 24.6.2003, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



_hunter, дык передай указатель на ней... какая разница-то?


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
_hunter
Дата 24.6.2003, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



какая разница не знаю, но Builder говорит вот что:
"Member function must be called or its address taken"



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Baa
Дата 24.6.2003, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Покажи свой код.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
_hunter
Дата 24.6.2003, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Примерно вот так:

Код
class CWindow {
 public:
   CWindow ();
   HWND Handle;
 private:
   WNDCLASS _class;
   LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM);
};

LRESULT CALLBACK CWindow::WndProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { }

CWindow::CWindow( ) {
 _class.lpfnWndProc = WndProcedure;
}




--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vickr
Дата 24.6.2003, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.5.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Объяви WndProcedure как static.
У меня VC++ 6.0 ругается матом:
cannot convert from 'long (__stdcall CWindow::*)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
и правильно делает.
Твоя WndProcedure имеет тип, отличный от _class.lpfnWndProc, поскольку ей неявно передается указатель на this твоего класса.

Это сообщение отредактировал(а) vickr - 24.6.2003, 16:38
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
RAN
Дата 24.6.2003, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



С радостью увидел этот топик, с радостью потому что сам когда-то решал эту проблему, тоже писал свой класс окна. Короче, функция должна быть static (об этом уже говорили). Раз функция будет статик, то она не будет знать ничего об объекте класса, то есть доступ будет только к статическим переменным. Поэтому надо записать адрес, созданного на базе класса окна, в окно ( я имею ввиду функцию SetWindowLongPtr). То есть в конструкторе делаешь hwnd = CreateWindow(...); SetWindowLongPtr(hwnd, 0, this); а потом в оконной функции делаешь CWindow* wincls = (CWindow*)GetWindowLongPtr(hwnd, 0);

Надо только учитывать, что при создании окна, оно ещё не имеет в 0 ячейке адреса объекта. И поэтому в WM_CREATE его ещё использовать нельзя.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.