Нужно знать, как правильно создать новый объект в другом файле cpp - PullRequest
0 голосов
/ 31 мая 2010

У меня есть класс. Проблема в том, что после нескольких попыток я все еще в большой ошибке. Моя проблема в том, что я не знаю, как правильно объявить новый объект для этого класса внутри другого файла cpp. Я хотел вызвать / вызвать функции из этого класса RebarHandler из моего другого файла cpp. Я продолжаю получать такие проблемы, как «используется без инициализации», «ошибка отладки» и т. Д.

В другом файле cpp я включил RebarHandler.h и сделал так:

CRebarHandler *test=NULL;
test->setButtonMenu2();

При компиляции я не выдает никакой ошибки. Но во время выполнения выдает ошибку и мой IE вылетает. Мне нужна помощь.

Ниже приведен класс, который я имел в виду:

    #pragma once

    class CIEWindow;

    class CRebarHandler  : public CWindowImpl<CRebarHandler>{
    public:
CRebarHandler(HWND hWndToolbar, CIEWindow *ieWindow);
CRebarHandler(){};

~CRebarHandler();

BEGIN_MSG_MAP(CRebarHandler)
    NOTIFY_CODE_HANDLER(TBN_DROPDOWN, onNotifyDropDown)
    NOTIFY_CODE_HANDLER(TBN_TOOLBARCHANGE, onNotifyToolbarChange)
    NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, onNotifyCustomDraw)
    NOTIFY_CODE_HANDLER(TBN_ENDADJUST, onNotifyEndAdjust)
    MESSAGE_HANDLER(WM_SETREDRAW, onSetRedraw)
END_MSG_MAP()

// message handlers
LRESULT onNotifyDropDown(WPARAM wParam, LPNMHDR pNMHDR, BOOL& bHandled); 
LRESULT onNotifyToolbarChange(WPARAM wParam, LPNMHDR pNMHDR, BOOL& bHandled);
LRESULT onNotifyCustomDraw(WPARAM wParam, LPNMHDR pNMHDR, BOOL& bHandled);
LRESULT onNotifyEndAdjust(WPARAM wParam, LPNMHDR pNMHDR, BOOL& bHandled);
LRESULT onSetRedraw(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

// manage the subclassing of the IE rebar
void subclass();
void unsubclass();
void handleSettings();
    void setButtonMenu2();
bool findButton(HWND hWndToolbar);

    private:
// handles to the various things
HWND m_hWnd;
HWND m_hWndToolbar, m_hWndRebar, m_hWndTooltip;
HMENU m_hMenu;

int m_buttonID;
int m_ieVer;

CIEWindow *m_ieWindow;

// toolbar finding functions
void scanForToolbarSlow();
void getRebarHWND();
void setButtonMenu();

};

1 Ответ

1 голос
/ 31 мая 2010

Неважно, что делает CRebarHandler, эти строки плохие:

CRebarHandler *test=NULL; 
test->setButtonMenu2(); 

У вас есть этот указатель, и вы сначала говорите «он ни на что не указывает», а затем вы говорите «продолжайте и используйте то, на что указывает указатель, чтобы установить меню кнопок». Не случится.

Попробуйте:

CRebarHandler test; 
test.setButtonMenu2(); 

или

CRebarHandler test= new CRebarHandler(); 
test->setButtonMenu2(); 

В зависимости от срока службы, который вы хотите проверить. Возможно, вы захотите использовать конструктор, который берет параметры вместо конструктора по умолчанию. Я хочу сказать, что вам нужно иметь CRebarHandler для вызова метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...