enum в namespace на VC 7.1.
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 23.04.04 05:01
Оценка:
На таком примере:
namespace A
{
enum B { b0, b1 };
}

struct My
{
    A::B x;
    My(): x() {} // 9
};

int main()
{
}


слетает VC 7.1 по ошибке:
main.cpp(9) : error C2065: 'B' : undeclared identifier
main.cpp(9) : error C2064: term does not evaluate to a function taking 0 arguments


Кто нибудь сталкивался? Нужны способы лечения VC, программы или головы.
getboost.codeplex.com
citylizard.codeplex.com
Re: enum в namespace на VC 7.1.
От: Webstyler  
Дата: 23.04.04 05:16
Оценка:
Здравствуйте, sergey_shandar, Вы писали:

_>На таком примере:

_>
_>namespace A
_>{
_>enum B { b0, b1 };
_>}

_>struct My
_>{
_>    A::B x;
_>    My(): x() {} // 9
_>};

_>int main()
_>{
_>}
_>


_>слетает VC 7.1 по ошибке:

_>
_>main.cpp(9) : error C2065: 'B' : undeclared identifier
_>main.cpp(9) : error C2064: term does not evaluate to a function taking 0 arguments
_>


Странно, я у себя проверил, ошибки нет.
Правда версия VC7.0

_>Кто нибудь сталкивался? Нужны способы лечения VC, программы или головы.
Re: enum в namespace на VC 7.1.
От: folk Россия  
Дата: 23.04.04 05:19
Оценка: 4 (1)
Здравствуйте, sergey_shandar, Вы писали:

Можно попробовать так:
_>
_>namespace A
_>{
_>enum B { b0, b1 };
_>}

_>struct My
_>{
_>    A::B x;
_>    My(): x(A::B()) {} // 9
_>};

_>int main()
_>{
_>}
_>


_>слетает VC 7.1 по ошибке:

_>
_>main.cpp(9) : error C2065: 'B' : undeclared identifier
_>main.cpp(9) : error C2064: term does not evaluate to a function taking 0 arguments
_>


_>Кто нибудь сталкивался? Нужны способы лечения VC, программы или головы.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[2]: enum в namespace на VC 7.1.
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 23.04.04 05:33
Оценка:
Здравствуйте, folk, Вы писали:

F>Можно попробовать так: ...

Согласен Правда столкнулся я здесь:
#include <boost/utility/value_init.hpp>
namespace A
{
enum B { b0, b1 };
}
int main()
{
    boost::value_initialized<A::B> q;
}


Пришлось писать врап для boost::value_initialized, что то вроде:
template<class T>
class enum_initialized
{
...
    enum_initialized(): x(T()) {}
};

template<class T>
struct value_initialized: boost::mpl::if_<
    boost::is_enum<T>, 
    enum_initialized<T>, 
    boost::value_initialized<T> >::type
{
...
};


Не хочеться исходники чужие исправлять.
getboost.codeplex.com
citylizard.codeplex.com
Re: enum в namespace на VC 7.1.
От: Аноним  
Дата: 23.04.04 05:53
Оценка:
Здравствуйте, sergey_shandar, Вы писали:

_>На таком примере:

_>
_>namespace A
_>{
_>enum B { b0, b1 };
_>}

_>struct My
_>{
_>    A::B x;
_>    My(): x() {} // 9
_>};

_>int main()
_>{
_>}
_>


_>слетает VC 7.1 по ошибке:

_>
_>main.cpp(9) : error C2065: 'B' : undeclared identifier
_>main.cpp(9) : error C2064: term does not evaluate to a function taking 0 arguments
_>


_>Кто нибудь сталкивался? Нужны способы лечения VC, программы или головы.


а написать

9:    My(): x (A::b0) {} // 9


нельзя?
Re[3]: enum в namespace на VC 7.1.
От: folk Россия  
Дата: 23.04.04 06:09
Оценка: +1
_>Здравствуйте, folk, Вы писали:

F>>Можно попробовать так: ...


_>Согласен Правда столкнулся я здесь:

[]
_>Не хочеться исходники чужие исправлять.


Немного в сторону. Вот подумалось, что объекты-перечисления лучше инициализировать энумератором, а не zero-initialization. Если среди энумераторов нет ни одного со значением ноль, то некрасиво получится. Хоть и законно.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[4]: enum в namespace на VC 7.1.
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 23.04.04 07:13
Оценка:
Здравствуйте, folk, Вы писали:

F>

F>Немного в сторону. Вот подумалось, что объекты-перечисления лучше инициализировать энумератором, а не zero-initialization. Если среди энумераторов нет ни одного со значением ноль, то некрасиво получится. Хоть и законно.
Согласен, но как определить другой конструктор? В своей задаче, я могу определить понятие значение по умолчанию, и определить что то вроде def_value<Enum>::value (тем более у меня, все равно, все генерируеться автоматически из XML). Но это только частный случай. Для общего случая пользуюся конструктором по умолчанию, а то что он zero-initialization или нет, это претензии к стандарту
getboost.codeplex.com
citylizard.codeplex.com
Re[2]: enum в namespace на VC 7.1.
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 23.04.04 09:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а написать


А>
А>9:    My(): x (A::b0) {} // 9
А>


А>нельзя?


Можно. Иногда . Только почему именно b0? Можно еще написать My():x(A::b1) {}
getboost.codeplex.com
citylizard.codeplex.com
Re[3]: enum в namespace на VC 7.1.
От: Аноним  
Дата: 23.04.04 10:45
Оценка:
Здравствуйте, sergey_shandar, Вы писали:

_>Здравствуйте, Аноним, Вы писали:


А>>а написать


А>>
А>>9:    My(): x (A::b0) {} // 9
А>>


А>>нельзя?


_>Можно. Иногда .



Только почему именно b0?
Можно еще написать My():x(A::b1) {}

а чего хочет человек, который пишет


 My(): x() {} // 9


? Видно, что он хочет проинициализировать поле x.
Только почему-то допустимые для этого поля значения (b0 и b1) его не устраивают.
Бред!
Re[4]: enum в namespace на VC 7.1.
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 23.04.04 14:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а чего хочет человек, который пишет

А>
А> My(): x() {} // 9
А>


А>? Видно, что он хочет проинициализировать поле x.

Нет. Хочет просто вызвать конструктор по умолчанию на VC 7.1. больше ничего!!! См. остальные посты почему и как это происходит. Тот пример который я дал это минимальный не работающий код, который должен работать. Обсуждать смысловую нагрузку минимального тестового примера не интересно.

А>Бред!

Такой же как и писать просто int i; И даже int i = int(). Так как не всегда в определенном контексте в допустимые по смыслу значения i входит 0 .
getboost.codeplex.com
citylizard.codeplex.com
Re: enum в namespace на VC 7.1.
От: Павел Кузнецов  
Дата: 23.04.04 17:10
Оценка: 1 (1)
> слетает VC 7.1 по ошибке:
>
> main.cpp(9) : error C2065: 'B' : undeclared identifier
> main.cpp(9) : error C2064: term does not evaluate to a function taking 0 arguments
>


Исправлено в VC++ Whidbey.
Posted via RSDN NNTP Server 1.8
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.