![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
все те же "бараны"..сериализация...
код:
http://liveworkspace.org/code/1c4390aba0b4...dbcbb1379eeefe6 компилится и работает. но точно такой же код, в составе проекта выдает такие ошибки:
содержимое файла enum_cast.hpp:
подскажите, чего оно от меня кочет? битый час выносит мне моцг спасибо. Добавлено @ 20:50 да, в проекте эти функции зовутся enum_cast_to и enum_cast_from это в воспроизводящем примере я их укоротил. Это сообщение отредактировал(а) boostcoder - 29.5.2012, 22:25 |
||||||
|
|||||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
Как я понимаю, ты пытаешься вызвать функцию, объявление которой компилятор нашел, а определение нет. Может, в определении у тебя имя функции с опечаткой?
--------------------
воин dzen'a |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это же шаблонные функции. у них декларация и реализация в одном "флаконе" |
|||
|
||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
А можно увидеть как в проекте вы вызываете enum_cast_from ?
Добавлено через 3 минуты и 8 секунд как она объявлется в том файле где используется? --------------------
воин dzen'a |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
код в топике, полностью идентичен тому что в проекте за исключением того, что в проекте помимо функции enum_test<>() еще куча других функций для других тестов. Добавлено через 1 минуту и 8 секунд кто "она" ? функция enum_cast_from? она в другом файле декларирована. текст того файла я так же привел в топике. |
|||
|
||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
я про вызов спрашивал именно к тому , что указывается ли явно при вызове к примеру enum_cast_to спецмфмкация шаблона.
Добавлено через 1 минуту и 34 секунды Извеняюсь....не увидел сразу что на enum_test() тоже "ругаются"..... --------------------
воин dzen'a |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
более никто не жив?
|
|||
|
||||
| Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: 1 Всего: 2 |
Прошу прощения за возможную глупость - но
Я правильно понял, что объявление шаблонной функции и ее реализация (в проекте) находятся в разных файлах? Поддерживает ли Ваш компилятор такое? ЕМНИП, некоторые так не умели. --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
нет. все в одном хидере. проблема, оказывается, была из-за того, что в С++03 нельзя использовать локальные типы в качестве параметра шаблона. а в реальном проекте используется именно С++03. всем спасибо. |
|||
|
||||
| volatile |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
boostcoder, Это к первоначальному вопросу не отностися, но в коде есть грубая ошибка.
При чтении из ia, по адресу переменной енум, будет записан int. Фактически запишется 4 байте (int) на место где находится один байт (enum2: char). Код затирает соседние ячейки! Этот код правда на С++03 вообще не скомпилится, поэтому можно сказать что реально ошибка будет только на 2011. Этот код видимо из реального С++03 проекта, и если подходить строго, то и здесь не все чисто. Стандарт С++03 не оговаривет что енум будет обязательно длиной int
Так что, записывать по адресу енума, инт - формально это и в С++03 грубая ошибка. (хотя реально код в С++03, вероятно, будет работать) |
||||||
|
|||||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да, ты прав. я на это напоролся, когда победил сабжевую ошибку и дописал код сравнения результата десериализации с исходным значением. собственно конечный код:
https://github.com/niXman/yas/blob/master/t...s/base/enum.hpp этого я тоже не знал. но так же, мне неизвестен компилятор где бы это было не так спасибо. |
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Дебилдер. Там по-умолчанию енумы 1 байт. Поэтому если мне требуется, чтобы енум гулял по сети, записывался в файл и т.п. (т.е. чтобы его размер был гарантированно 4 байта вне зависимости от настроек) то я добавляю в конец списка 0x7FFFFFFF
хотел подсказать, что за такую помощь неплохо было бы volatile поблагодарить плюсиком, но вижу, что опоздал))) Это сообщение отредактировал(а) borisbn - 31.5.2012, 10:50 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
жуть какая
Добавлено через 9 минут и 10 секунд да, для YAS не заявлена поддержка билдера) |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
вот здесь предлагается использовать спец. шаблон для обхода неопределенности с типом енума в с++03. (с первого взгляда, довольно юзабельно)...
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |