Ошибка при создании временного объекта, конструктор которого принимает один параметр перечисления

Почему приведенный ниже код недействителен (по крайней мере, с использованием Visual Studio 2010 или ideone)?

// E.h
enum E
{
AN_E_VALUE
};

// C.h
class C
{
public:
explicit C(E e) // explicit keyword is optional
{}

void Foo() {}
};

// main.cpp
int main(int argc, char** argv)
{
C c(AN_E_VALUE);      // fine
C(AN_E_VALUE);        // error
C(AN_E_VALUE).Foo();  // fine
return 0;
}

Если параметр не является перечисляемым типом, он работает нормально.

Компилятор понимает ошибочный вызов как вызов с 0 аргументами, где ожидается 1. Почему это?

2

Решение

C(AN_E_VALUE);

Это объявляет объект типа C с именем AN_E_VALUE, Ошибка жалуется на тот факт, что вам нужен конструктор по умолчанию для инициализации AN_E_VALUE, но конструктора по умолчанию не существует (и ни один не объявлен неявно).
Вы когда-нибудь пробовали это?

int(a);

По сути, это то же самое. Возможно проверить этот вопрос.

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector