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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Extern Class 
:(
    Опции темы
Ninazu
Дата 10.2.2013, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Камнями не кидать только начинаю знакомство с ООП. Решил создать пару окон, и на них по несколько кнопок. Хотелось красивой реализации, поэтому хочу через классы оформить все.
Алгоритм такой. Класс PB_WINDOW создает окно, а его дочерний класс PB_GADGET создает в этом окне несколько элементов. Список элементов решил хранить в map GLIST, чтобы можно легко было к нему обратиться.
Код

    PB_WINDOW MAINW("Hello2",200,300);
    MAINW.AddGadget(PB_G_BUTTON,"Button1",10,10,100,40,"");
    //MAINW.GLIST["Button1"].Visible=TRUE;


Помимо этого сделать так чтобы функция Visible была общей для обеих классов PB_WINDOW и PB_GADGET. Ну и интуитивно понимаю что один из классов должен быть объявлен явно через extern, так как эти два класса используют друг друга и в какой бы последовательности их не объявляй, все равно без промежуточного объявления не  обойтись. Или я не правильно всё делаю? Как правильно объявить или избавиться от этих танцев с бубном?

Код

class PB_GADGET:PB_WINDOW{
public: 
    HWND hWndGadget;
    PB_GADGET(_In_ GADGET_TYPE Type,
        _In_ LPCSTR Name,
        _In_ INT X,
        _In_ INT Y, 
        _In_ INT W, 
        _In_ INT H, 
        _In_ LPSTR Title,
        _In_ HWND hWnd);
};

class PB_WINDOW{
public:
    HWND hWnd;
    std::map<char*, PB_GADGET> GLIST;
    virtual BOOL Visible(_In_ BOOL State=PB_GETTER);
    PB_WINDOW(_In_ LPCSTR Title, 
        _In_ INT W, 
        _In_ INT H,
        _In_opt_ DWORD Flags=NULL,
        _In_opt_ INT X=CW_USEDEFAULT, 
        _In_opt_ INT Y=CW_USEDEFAULT, 
        _In_opt_ HWND ParentWindowID=NULL);
    BOOL AddGadget(_In_ GADGET_TYPE Type,
        _In_ INT X,
        _In_ INT Y, 
        _In_ INT W, 
        _In_ INT H, 
        _In_ LPSTR Title);
    ~PB_WINDOW();
};

PM MAIL   Вверх
mes
Дата 10.2.2013, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Ninazu, поиск по forward declaration 


--------------------
PM MAIL WWW   Вверх
Ninazu
Дата 11.2.2013, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот спасибо добрый человек!) Я только оттуда)
Это первое что я попробовал, добавить в начало
Код

class PB_WINDOW;

Но это не меняет картину
Цитата

error C2504: PB_WINDOW: не определен базовый класс


PM MAIL   Вверх
korian
Дата 11.2.2013, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

class PB_GADGET;

class PB_WINDOW{
public:
...
    std::map<char*, PB_GADGET*> GLIST; // указатель
// для того, чтобы хранить не указатель, а сам объект,
// надо знать его размер, т.е. он должен быть уже определен
...
};

class PB_GADGET:PB_WINDOW{
public: 
...
};


Это сообщение отредактировал(а) korian - 11.2.2013, 00:52
PM   Вверх
Ninazu
Дата 11.2.2013, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



korian, Спасибо! Запомню про указатель.
Как понимаю тогда нужно и конструктор переделать чтобы, не выскакивал еггорка
Цитата

error C2512: PB_WINDOW: нет подходящего конструктора по умолчанию

Пока у меня так
Код

PB_GADGET::PB_GADGET(GADGET_TYPE Type, INT X, INT Y, INT W, INT H, LPSTR Title,HWND hWnd){
...
}

PM MAIL   Вверх
bsa
Дата 14.2.2013, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Ninazu, в качестве грамотного примера ООП в области GUI рекомендую познакомиться с Qt: http://qt-project.org/doc/qt-4.8/how-to-learn-qt.html
PM   Вверх
Ninazu
Дата 14.2.2013, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bsa, Спасибо! Пример с калькулятором, приблизительно то же, чего хочу добиться я
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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