Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GetState() - declaration, GetState() - declaration 
:(
    Опции темы
interesuuwiysia
Дата 18.2.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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!

Если, кто что может подсказать - буду бесконечно признателен!!!!!
PM MAIL   Вверх
maxim1000
Дата 18.2.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



насколько я понял, требуется вызвать GetState для какой-то конкретной кнопки
тогда и надо писать button.GetState, где button - имя кнопки в данном случае
ну или button->GetState, если button - указатель на объект CButton...


--------------------
qqq
PM WWW   Вверх
interesuuwiysia
Дата 18.2.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(maxim1000 @ 18.2.2006, 20:31)
насколько я понял, требуется вызвать GetState для какой-то конкретной кнопки
тогда и надо писать button.GetState, где button - имя кнопки в данном случае
ну или button->GetState, если button - указатель на объект CButton...

Да, ты правильно понял. Но суть в том, что предлагаемый тобой вариант является способом обращения к элементу структуры или класса. Вызов же функции для какого-то отдельного объекта осуществляется через оператор видимости "::"!

Объявление ф-ии GetState производится в заголовочном файле afxwin.h и имеет вид:
UINT GetState() const;
Вот я никак и не могу разобраться, что означает это самое const после имени функции! Это с++ примочка. В обычном С такого нет, вот я и пасую. Мне кажется, что в понимании этого кроется ответ на мой вопрос....

Это сообщение отредактировал(а) interesuuwiysia - 18.2.2006, 21:06
PM MAIL   Вверх
maxim1000
Дата 18.2.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(interesuuwiysia @ 18.2.2006, 20:01 Найти цитируемый пост)
Вызов же функции для какого-то отдельного объекта осуществляется через оператор видимости "::"

нет


Цитата(interesuuwiysia @ 18.2.2006, 20:01 Найти цитируемый пост)
Вот я никак и не могу разобраться, что означает это самое const после имени функции!

это означает что функция не меняет состояния объекта, для которого она вызывается


--------------------
qqq
PM WWW   Вверх
interesuuwiysia
Дата 18.2.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

что я опять неправильно делаю?
PM MAIL   Вверх
maxim1000
Дата 19.2.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(interesuuwiysia @ 18.2.2006, 21:17 Найти цитируемый пост)
где button - имя кнопки (точнее я использую ее ID)

при чем тут ID?
нужен объект
ID - всего лишь свойство кнопки, которое используется для ее идентификации
для управления с помощью функций класса CButton нужен объект класса CButton...


--------------------
qqq
PM WWW   Вверх
Coocky
Дата 20.2.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата(interesuuwiysia @ 18.2.2006, 19:39 Найти цитируемый пост)
CButton::GetState()


Цитата(interesuuwiysia @ 18.2.2006, 19:39 Найти цитируемый пост)
'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'

Плохо знаем С++..
Это не статическая функция класса и вызывать ее без СОЗДАНИЯ (обьявления ) обьекта-нельзя!

Цитата(interesuuwiysia @ 18.2.2006, 22:17 Найти цитируемый пост)
error C2228: left of '.GetState' must have class/struct/union type

Оператор, который находится слева от GetState-неизвестен!

100% нет обьявления CButton button;
а уж затем button.GetState();
Если тебе нравятся ID и уже сть созданый обьект CButton-тогда
CButton* butt=(CButton*)GetDlgItem(IDC_MY_BUTTON);
butt->GetState();
Все..



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
interesuuwiysia
Дата 20.2.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, попробуем... А с++ я вообще не знаю smile ну не прогреммерская у меня спецальность.... Приходится постепенно самому во всем разбираться...
PM MAIL   Вверх
interesuuwiysia
Дата 20.2.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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(); после этого компилятор и начал писать мне такое...
Но сейчас я все вернул на место, а компилятор все-равно выдает ту же ошибку.... В чем дело?
PM MAIL   Вверх
Dreamer_0x01
Дата 20.2.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Rebuild All делал?

И можно кусок кода, в котором вызывается эта функция?
Добавлено @ 19:50
Цитата(interesuuwiysia @ 20.2.2006, 18:26 Найти цитируемый пост)
затем уже вызывать функцию m_MySweetButton.GetState()... Я прав?

прав.



--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
interesuuwiysia
Дата 20.2.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

Ща пытаюсь в МСДН разобраться, но что-то я никак не пойму там ничего...


PM MAIL   Вверх
Earnest
Дата 21.2.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



interesuuwiysia,
тебе русским языком линкер говорит, что хочет найти статическую функцию GetState! Значит, не все вернул...

Цитата(interesuuwiysia @ 20.2.2006, 17:11 Найти цитируемый пост)
А с++ я вообще не знаю

Однако ж вот, ума хватило в библиотечных файлах поковыряться. smile

Переставь свой MFC (или скопируй откуда-нибудь). Копию-то перед ковырянием сохранил, надеюсь?







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


Новичок



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

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



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


 




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


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

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