Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
#1

Передача элементов перечисления (enum) в конструктор - C++

15.10.2013, 21:29. Просмотров 1164. Ответов 3
Метки нет (Все метки)

Всем добрый день!
Заметил некоторые странности при передачи элементов перечисления в конструктор. Вот пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
class B
{
public:
    enum cmp_mode {normal, reverse};    
private:
    cmp_mode mode;
public:
    B(cmp_mode m=normal): mode(m) {}
};
 
int main()
{
    B();                // инициализация безымянного объекта конструктором без параметров
    B();                // снова инициализация безымянного объекта конструктором без параметров
    B(normal);          // инициализация безымянного объекта конструктором с 1 параметром
//  B(normal);          // [?] ошибка: "error C2086: B normal: переопределение". Почему?
//  B(B::normal);       // [?] ошибка: "error C2761: B::cmp_mode normal: повторное объявление функции не разрешается". Почему?
    B obB(B::normal);   // [?] почему работает, если похожая инструкция B(B::normal) выдаёт ошибку? Всего лишь дописал объекту имя.
 
    system("pause");
    return 0;
}

Помогите разобрать строчки, помеченные "[?]". Никак не могу понять
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 21:29     Передача элементов перечисления (enum) в конструктор
Посмотрите здесь:

Правильное применение перечисления enum - C++
Дело в том, что не пойму как работать с перечислением. Мне нужно, чтобы программа принимала данные о 3 сотрудниках ( дата найма на работу,...

Диапазон перечисления enum и его размер. - C++
Объясните,пожалуйста,точный,на Ваш взгляд,смысл диапазона перечисления enum и есть ли связь размера и диапазона? Точнее: Например,есть...

Определение перечисления (enum) в другом файле - C++
Доброго времени суток! :) Вот мой вопрос: в классе A мне необходимо использовать перечисление B, но объявление и определение класса...

Перечисления enum. Хранение типа телефонного номера - C++
Ввести в массив структур N записей из телефонной книжки (фамилия, имя, номер телефона, тип номер (домашний, рабочий, мобильный)). Вывести...

Перечисления (enum): для чего они нужны? Как, когда и какими перечислениями уместнее пользоваться? - C++
Предположим есть такой код: #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;Windows.h&gt; enum airplanes {SU6, SU29, SU34}; //...

Enum передача по ссылке - C++
Ребята, подскажите, как передать enum в функцию, что бы внутри функции установить значение. Точнее мне надо всё под тип int сделать, так...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.10.2013, 21:59     Передача элементов перечисления (enum) в конструктор #2
Цитата Сообщение от Paket236 Посмотреть сообщение
B(normal);* * * * * // инициализация безымянного объекта конструктором с 1 параметром
это безымянный объект? нет это именной объект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
class B
{
public:
    enum cmp_mode {normal, reverse};    
private:
    cmp_mode mode;
public:
    B(cmp_mode m=normal): mode(m) { std::cout << "c-tor\n"; }
    int foo;
};
 
int main()
{
    std::cout << 1 << std::endl;
    B();               
    std::cout << 2 << std::endl;
    B();               
    std::cout << 3 << std::endl;
    B(normal);         
    normal.foo = 5;
    std::cout << normal.foo << std::endl;
    //B(normal);         
    //B(B::normal);      
    std::cout << 4 << std::endl;
    B obB(B::normal);  
 
    return 0;
}

Не по теме:

вот нежданчик

Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
16.10.2013, 14:01  [ТС]     Передача элементов перечисления (enum) в конструктор #3
Цитата Сообщение от Jupiter Посмотреть сообщение
это безымянный объект? нет это именной объект
Ого, не знал, что так можно задавать имя объекту

А не могли бы Вы прояснить ситуацию, почему инструкция
C++
1
B(B::normal);
не работает, а инструкция
C++
1
B obB(B::normal);
работает?

Добавлено через 15 часов 42 минуты
Нашёл решение.
Чтобы инструкция заработала, надо взять её в скобки:
C++
1
(B(B::normal));
Очень странно. Знать бы, почему так.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 14:49     Передача элементов перечисления (enum) в конструктор
Еще ссылки по теме:

Передача enum в качестве аргумента метода класса - C++
Есть класс //class order; class ticket{ enum type_of_place { coupe, general, berth, wagon_lit }_type_of_place; char*...

Передача аргументов в конструктор - C++
У меня есть в классе конструктор по умолчанию: Port(const char * br = &quot;none&quot;,const char * st = &quot;none&quot;,int b = 0); Я создал производный...

Передача потока в конструктор - C++
Подскажите пожалуйста, как создать динамический массив объектов класса, передавая в конструктор потока. ifstream f(&quot;data.txt&quot;,...

Передача массива в конструктор производного класса - C++
Народ, задача такая: Создать абстрактный класс с виртуальной функцией – норма. Создать производные классы : комплексные ...

Передача двумерного массива в конструктор класса - C++
Здравствуйте! Не получается передать двумерный массив как параметр конструктора. Необходимо, чтобы пользователь ввел размерность...

Передача строки в конструктор или в функцию - C++
Как передать в конструктор класса строку без массивов, да и в функцию как передать строку и дальше действия над ней производить?А то в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.10.2013, 14:49     Передача элементов перечисления (enum) в конструктор #4
http://en.wikipedia.org/wiki/Most_vexing_parse
Yandex
Объявления
16.10.2013, 14:49     Передача элементов перечисления (enum) в конструктор
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru