Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к члену переменной др. класса. Как это сделать. 
V
    Опции темы
Edik
Дата 13.6.2007, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006

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



У меня в программе на МФС есть два класса диалоговых окон CDlg1 и CDlg2. Так вот в классе CDlg1 есть переменная int Size, причем из этого класса вызываеться диалоговое окно класса CDlg2, второй диалог, модальный, а первый диалог не закрываеться. И мне в диалоговое окно этого класса CDlg2 надо вывести в его Edit переменную int Size из предыдущего класса, из которого вызвано это окно CDlg2. Как это сделать? Надо наверно копирующий конструктор в классе CDlg1 создать. Или как? Потому что просто так вот во втором классе CDlg2
Код

СDlg1 *cDlg1;
int nSize=cDlg1->Size;

ничего не выходит.
Предположим я в классе CDlg1 реализовал фунцию его, этого класса, которая возвращает указатель на переменную из него Size. Когда вызываю эту функцию во втором классе CDlg2
Код

int nSize=CDlg1::GetSize();

пишет компилятор, что "неправильный вызов не статической фунции, смотри объявление GetSize()".
Что за чертовня. Ну замучено! Капец. Кто знает подскажите.
PM MAIL   Вверх
Greeen
Дата 13.6.2007, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Объявляешь в классе CDlg1 переменную int size (для простоты примера public). Далее когда нужно отобразить второй диалог:
Код

CDlg2 dlg(this); // делаем родителем текущий диалог
dlg.DoModal();

В классе CDlg2 чтобы обратиться к этой переменной
Код

int size = reinterpret_cast<CDlg1*>(GetParent())->size;

Не забываем в Dlg1.h подключить Dlg2.h и наоборот.
Удачи!!

*** Все же рекомендую язык подучить  smile ***

Это сообщение отредактировал(а) Greeen - 13.6.2007, 06:39


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Edik
Дата 14.6.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006

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



Я попробывал делать так, все равно ничего не вышло.
Первый способ, выдает ошибку во время исполнения:
Код

    CFindDlg *fdlg;
    CEnglishDlg *cendlg=reinterpret_cast<CEnglishDlg*>(fdlg->GetParent());
    int isize=cendlg->intSize;

И второй способ, тоже не вышло, выдает что ->intSize не член CWnd:
Код

            CFindDlg *fdlg;
    CEnglishDlg *cendlg=reinterpert_cast<CEnglishDlg*>(GetParent());
    int isize=cendlg->intSize;

Второй способ я взял из твоего примера из предыдущего поста.
PM MAIL   Вверх
zkv
Дата 14.6.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Edik, а в классе CEnglishDlg ты завел член intSize? Видимо нет.

вру, невнимательно прочитал, этот код должен давать другую ошибку (типа udefined symbol reinterpert_cast), покажи свой код, который у тебя

и вообще 
Цитата

*** Все же рекомендую язык подучить  smile ***

дельный совет smile В элементарных вещах плаваешь.  smile 

Это сообщение отредактировал(а) zkv - 14.6.2007, 15:00
PM MAIL   Вверх
Edik
Дата 14.6.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006

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



О! Получилось! Пацаны, спасибо всем. Но извините, я только начал изучать С++, поэтому и залез на форум. А книги бумажные очень поверхностные (читаю щас две). А MSDN я тоже поверхностно понимаю, так как в энгише не очень шарю, хотя на 80% MSDN я понимаю. Но все равно, я пока еще начинающий, так что не обижайтесь. Вот правильный код.
Код

void CFindDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    CEnglishDlg *cendlg=(CEnglishDlg*)GetParent();
    int isize=cendlg->intSize;
}

Я не знал про GetParent();. Немного еще с классами CWnd путаюсь, как что к чему приводить. Спасибо, вы мне открыли новое поле для понимания!
PM MAIL   Вверх
Greeen
Дата 14.6.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да всегда пожалста  smile 


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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