реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Присвоение значения типу enum в С++
Sergey-Ufa
сообщение Jul 29 2014, 17:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



Для улучшения читаемости кода захотел использовать в форме Form1 тип enum
. . . . . .
public:
enum {METOD, FILE} Place;
. . . . . .
внутри формы все нормально работает
. . . . . .
Place=METOD;
switch(Place)
{case METOD:
. . . . . .
break;
case FILE:
. . . . . .
};
Но если попытаться придать значение Place из формы Form2
. . . . . .
Form1->Place=METOD;
то компилятор ругается, что не знает никакого METOD.
Пролазит либо
Form1->Place=0;
либо объявление Place в Form1 в качестве глобальной переменной. Ни то, ни другое мне не нравится по причине потери наглядности и читаемости. Есть ли какой нибудь выход?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 29 2014, 18:04
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Sergey-Ufa @ Jul 29 2014, 21:24) *
Для улучшения читаемости кода захотел использовать в форме Form1 тип enum
. . . . . .
public:
enum {METOD, FILE} Place;
. . . . . .
внутри формы все нормально работает
Но если попытаться придать значение Place из формы Form2
. . . . . .
Form1->Place=METOD;
то компилятор ругается, что не знает никакого METOD.
Есть ли какой нибудь выход?


Выход есть. Енумы, объявленные внутри класса, можно использовать снаружи, с явным указанием класса:
Form1->Place=КЛАССФОРМЫ::METOD;
Но вы не указали, как зовут класс, к которому принадлежит Form1, а потому конкретнее дать ответ не могу. А само Form1 - это не имя класса, а имя его представителя.
Go to the top of the page
 
+Quote Post
Sergey-Ufa
сообщение Jul 29 2014, 18:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



Цитата(Xenia @ Jul 29 2014, 21:04) *
Выход есть. Енумы, объявленные внутри класса, можно использовать снаружи, с явным указанием класса:
Form1->Place=КЛАССФОРМЫ::METOD;
Но вы не указали, как зовут класс, к которому принадлежит Form1, а потому конкретнее дать ответ не могу. А сама Form1 - это не класс, а его представитель.


class TComments : public TForm
{public:
enum {METOD, FILE} Place;
. . . . . .
}
extern PACKAGE TComments *Comments;


На форме Form2
Comments->Place=TComments::METOD;
Правильно?


Xenia, все работает. Спасибо!
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 29 2014, 18:35
Сообщение #4


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Sergey-Ufa @ Jul 29 2014, 22:22) *
Comments->Place=TComments::METOD;


Только "метод" обычно пишут как "METHOD", а так оно глаз режет. sm.gif
Go to the top of the page
 
+Quote Post
Sergey-Ufa
сообщение Jul 29 2014, 18:54
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



biggrin.gif biggrin.gif biggrin.gif

Сообщение отредактировал Sergey-Ufa - Jul 29 2014, 18:55
Go to the top of the page
 
+Quote Post
menzoda
сообщение Jul 30 2014, 06:46
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 13-09-12
Пользователь №: 73 530



Цитата(Xenia @ Jul 29 2014, 22:35) *
Только "метод" обычно пишут как "METHOD", а так оно глаз режет. sm.gif

Вот это дельное замечание, а то от всяких massiv, znachenie, indeks, summa и других подобных фантазий, у меня кровь из глаз течет.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 07:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01716 секунд с 7
ELECTRONIX ©2004-2016