![]() |
|
|
![]()
|
|
| interesuuwiysia |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Блин, столкнулся с проблемой при использовании ф-ии GetState(). Приведу ниже участок кода и сообщение компилятора:
void CSimulatorDlg::OnSpeedIncrement() { if(CButton::GetState() & 0x0003 == 1) { UpdateData(); m_speed++; UpdateData(false); } } Что пишет компилятор: error C2352: 'CButton::GetState' : illegal call of non-static member function c:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(2715) : see declaration of 'GetState' Блин, ниче не могу понять! Где я ошибаюсь? Да и тем более никак не могу найти в МСДН библиотеке раздел об объявлении GetState! Если, кто что может подсказать - буду бесконечно признателен!!!!! |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
насколько я понял, требуется вызвать GetState для какой-то конкретной кнопки
тогда и надо писать button.GetState, где button - имя кнопки в данном случае ну или button->GetState, если button - указатель на объект CButton... -------------------- qqq |
|||
|
||||
| interesuuwiysia |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Да, ты правильно понял. Но суть в том, что предлагаемый тобой вариант является способом обращения к элементу структуры или класса. Вызов же функции для какого-то отдельного объекта осуществляется через оператор видимости "::"! Объявление ф-ии GetState производится в заголовочном файле afxwin.h и имеет вид: UINT GetState() const; Вот я никак и не могу разобраться, что означает это самое const после имени функции! Это с++ примочка. В обычном С такого нет, вот я и пасую. Мне кажется, что в понимании этого кроется ответ на мой вопрос.... Это сообщение отредактировал(а) interesuuwiysia - 18.2.2006, 21:06 |
|||
|
||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
нет
это означает что функция не меняет состояния объекта, для которого она вызывается -------------------- qqq |
||||
|
|||||
| interesuuwiysia |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Вот когда я пытаюсь реализовать предложеную тобой схему button.GetState, где button - имя кнопки (точнее я использую ее ID), то мне компилятор выдает следующее:
C:\Program Files\Microsoft Visual Studio\MyProjects\simulator\simulatorDlg.cpp(132) : error C2228: left of '.GetState' must have class/struct/union type что я опять неправильно делаю? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
при чем тут ID? нужен объект ID - всего лишь свойство кнопки, которое используется для ее идентификации для управления с помощью функций класса CButton нужен объект класса CButton... -------------------- qqq |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Плохо знаем С++.. Это не статическая функция класса и вызывать ее без СОЗДАНИЯ (обьявления ) обьекта-нельзя!
Оператор, который находится слева от GetState-неизвестен! 100% нет обьявления CButton button; а уж затем button.GetState(); Если тебе нравятся ID и уже сть созданый обьект CButton-тогда CButton* butt=(CButton*)GetDlgItem(IDC_MY_BUTTON); butt->GetState(); Все.. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| interesuuwiysia |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Спасибо, попробуем... А с++ я вообще не знаю
|
|||
|
||||
| interesuuwiysia |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Кстати, кажется до меня начало доходить: сперва ведь надо создать для объекта переменную типа control - m_MySweetButton, затем уже вызывать функцию m_MySweetButton.GetState()... Я прав?
Только вот опять столкнулся с проблемой. теперь компилятор пишет: simulatorDlg.obj : error LNK2001: unresolved external symbol "public: static unsigned int __cdecl CButton::GetState(void)" (?GetState@CButton@@SAIXZ) Debug/simulator.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. Дело в том, что я недавно ковырялся в afxwin.h и правил там UINT GetState() const; на static UINT GetState(); после этого компилятор и начал писать мне такое... Но сейчас я все вернул на место, а компилятор все-равно выдает ту же ошибку.... В чем дело? |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Rebuild All делал?
И можно кусок кода, в котором вызывается эта функция? Добавлено @ 19:50
прав. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| interesuuwiysia |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
void CSimulatorDlg::OnSpeedIncrement()
{ if(m_SpeedIncrement.GetState() & 0x0004 == 0) { UpdateData(); m_speed++; UpdateData(false); } while (m_SpeedIncrement.GetState() & 0x0004 != 0) { UpdateData(); m_speed++; UpdateData(false); Sleep(250); } } при комниляции этого участка появляется ошибка simulatorDlg.obj : error LNK2001: unresolved external symbol "public: static unsigned int __cdecl CButton::GetState(void)" (?GetState@CButton@@SAIXZ) Debug/simulator.exe : fatal error LNK1120: 1 unresolved external Ща пытаюсь в МСДН разобраться, но что-то я никак не пойму там ничего... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
interesuuwiysia,
тебе русским языком линкер говорит, что хочет найти статическую функцию GetState! Значит, не все вернул... Однако ж вот, ума хватило в библиотечных файлах поковыряться. Переставь свой MFC (или скопируй откуда-нибудь). Копию-то перед ковырянием сохранил, надеюсь? -------------------- ... |
|||
|
||||
| interesuuwiysia |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Спасибо за помощь! Я во всем уже сам разобрался! Все работает и компилятор доволен
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |