Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Переход с C на C++

15K
06 февраля 2009 года
kant
64 / / 02.06.2007
Привет.

Я до сегоднечнего дня программировал на C,а вот сегодня решил написать что нибуд на C++.
Так вот я создал MFC проект, на форму умистил CEdit текстовое поле,все нормально работало, в обычных функциях можно было работать через методы, но когда я решил написать свою собственную функцию и из него обратится к данному текстовому полю компилятор пишет undeclared variable

Примерно это выглядит так
 
Код:
void myfunc(void)
{
     m_Status.SetWindowText("LOL");
}


m_Status это то текстовое поля.

Так вот вопрос,почему в мною созданной функции на видно m_Status ?
11K
06 февраля 2009 года
zuze
84 / / 07.03.2008
undeclared variable - это необъявленная переменная.
Значит надо объявить m_Status.

Если что не так, выложите полный код, а то не понятно как Вы обявляли переменные и так далее, с полным кодом всегда более понятно и быстрее разбирёмся, тем более как я думаю он небольшой.
11K
06 февраля 2009 года
zuze
84 / / 07.03.2008
Ваша функция не принадлежит классу, а m_Status пренадлежит определённому классу в программе из-за это-го и не видно m_Status.

Надо сделать так (общий вид) допустим Вы проект назвали Sample:

 
Код:
void CSampleDlg :: myfunc(void)
{
     m_Status.SetWindowText("LOL");
}
92
06 февраля 2009 года
Тень Пса
2.2K / / 19.10.2006
для начала почитать учебники по С++, например про ООП и про различия С/С++
11K
06 февраля 2009 года
zuze
84 / / 07.03.2008
Я согласен с пользователем Тень Пса.
Поделай сначала консольные программы с классами.

Лично я С++ изучал по книге
"С++ в лекциях и упражнениях" автор Стивен Прата.

Что меня в этой книге порадовало код целый, а не куски из кода, ошибок в коде нету и опечаток в тексте.

Так как я пишу в основном консольные программы, а иногда с графическим интерфейсом мне достаточно знать С++ и WinAPI.

Счас начал идти дальше начал изучать DirectX 9.
15K
06 февраля 2009 года
kant
64 / / 02.06.2007
Цитата: Тень Пса
для начала почитать учебники по С++, например про ООП и про различия С/С++



Да,не говорите.
Как же я сам не догодался.

15K
06 февраля 2009 года
kant
64 / / 02.06.2007
Цитата: zuze
Ваша функция не принадлежит классу, а m_Status пренадлежит определённому классу в программе из-за это-го и не видно m_Status.

Надо сделать так (общий вид) допустим Вы проект назвали Sample:

 
Код:
void CSampleDlg :: myfunc(void)
{
     m_Status.SetWindowText("LOL");
}



Я это переменные создавал стандартным способом, т.е. нажал правой кнопкой по объекту а там уже Add variable.

Я понял что в моей функции этой перем. на видно потому что он пренадлежит другому классу.

Я по пробовал написать перед функции идентификатор класса но не действует,может где нибудь еще что то надо настроит ?

Или есть ли возможность сделать все перем. публичными,т.е. чтобы можна было с ними работать из под любой функции ?

11K
06 февраля 2009 года
zuze
84 / / 07.03.2008
А если так сделать

 
Код:
void CSampleDlg :: myfunc(void)
{
     CEdit *m_Status;
     m_Status->SetWindowText("LOL");
}
3
06 февраля 2009 года
Green
4.8K / / 20.01.2000
Цитата: zuze
А если так сделать

 
Код:
void CSampleDlg :: myfunc(void)
{
     CEdit *m_Status;
     m_Status->SetWindowText("LOL");
}


А если, как советует Тень Пса, "почитать учебники по С++" ?
Тебя не смущает, что ты используешь неинициализированный указатель?

3
06 февраля 2009 года
Green
4.8K / / 20.01.2000
Цитата: kant

Я по пробовал написать перед функции идентификатор класса но не действует,может где нибудь еще что то надо настроит ?

Или есть ли возможность сделать все перем. публичными,т.е. чтобы можна было с ними работать из под любой функции ?


Воспользуйся советом, почитай книги по С++.
Разберись, что такое класс, что такое члены класса.

Твоя ошибка, действительно, от незнания C++, но MFC тут не при чем, а "стандартный способ" - это объявить и определить член класса, а не "нажал правой кнопкой по объекту а там уже Add variable".

11K
06 февраля 2009 года
zuze
84 / / 07.03.2008
Согласен с вами Green указатель надо инициализировать.
Я иногда забываю про это, но при отладке я их нахожу и поправляю.
36K
06 марта 2009 года
Gluk-max
5 / / 24.02.2008
Важно не только инициализировать, но и после окончания использования объекта чистить память=)
А вообще я бы не советовал сразу пытаться разобраться с иерархией класов MFC. Лучше изучить сначало основы ООП (желательно без привязки к языку).
36K
06 марта 2009 года
Gluk-max
5 / / 24.02.2008
А вообще странно что обсуждение идет в ветке "Microsoft Visual C++" =)
255
06 марта 2009 года
Dart Bobr
1.4K / / 09.04.2004
Цитата: zuze
Согласен с вами Green указатель надо инициализировать.
Я иногда забываю про это, но при отладке я их нахожу и поправляю.


Ага, вот так кто-то где-то забудет инициализировать что-то, а потом вылазит бага - сиди и ищи в нескольких тысячах строчек кода.
Лучше выработайте привычку инициализировать переменные при обьявлении - себе дешевле будет.
З.Ы. Это так, высказываю свое мнение, исходя из собственного опыта.

3
06 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: Gluk-max

Важно не только инициализировать, но и после окончания использования объекта чистить память=)


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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог