Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/41: Рейтинг темы: голосов - 41, средняя оценка - 4.63
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Не получается reinterpret_cast<uint64_t>

31.12.2014, 10:50. Показов 9474. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
 double x;
 uint64_t u;
 TDoubleMantissFormatMarker f;
 x=1.23456e+2;
 u=reinterpret_cast<uint64_t>(x);
на 5-ю строку пишет:
C:\Projects\Test\Test\test.cpp|68|error: invalid cast from type 'double' to type 'uint64_t {aka long long unsigned int}'|
.
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.12.2014, 10:50
Ответы с готовыми решениями:

А где uint64_t декларирован?
А где uint64_t декларирован?

Uint64_t - проверить его существование
Вопрос в следующем. Стандарт С99 не обязывает реализовывать типы с точным размером (напр. int8_t или uint64_t), вопрос, как на этапе...

Ошибка компиляции: 'uint64_t' does not name a type
при компиляции проекта возникает следующая ошибка: ...\library\system.h:164: ошибка: 'uint64_t' does not name a type в коде...

88
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.01.2015, 11:03  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Т.е. int64_t уже не подходит? И обычный int тоже? Я правильно понял? Если да, то вот так:
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct strict_uint64_t
{
public:
template <typename ArgT
, typename Check = typename st
Зачем здесь шаблон?

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
У меня не хватит терпения объяснять вам азы языка.
Выше вам уже показали, что единственный переносимый способ добиться такого поведения для не шаблонной функции:
Каким боком здесь переносимость? На одной машине записали файл, потом на другой читаем. Пусть она другой платформы. И что? Чем поможет лишний параметр? Восьмёрка всё равно известна на этапе компиляции. Или там вдруг байты по 16 бит? Так для такой платформы всё равно всё переписывать, начиная с системных вызовов, замена в одной функции восьмёрки четверкой не поможет. Нафига вообще передавать константу? Её надо зашить в код.

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
При этом:
Цитата Сообщение от taras atavin Посмотреть сообщение
Сколько версий конструктора будет в исполняемом коде? И типов как раз надо много. double, int64_t, uint64_t, классы... Всё надо свалить в одну функцию.
Да хоть 100500 версий - это спички.
Ну при этом. И что? Экономия здесь при чём?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
02.01.2015, 14:57
Цитата Сообщение от taras atavin Посмотреть сообщение
Зачем здесь шаблон?
Чтобы сравнить типы. Если мы сделаем просто конструктор, который принимает uint64_t, то к нашему типу будут применимы все те правила преобразования, которые применимы к uint64_t. Ты же вроде как хотел этого избежать. Это единственный способ это сделать. Проверку можно перенести в static_assert, но шаблонный конструктор должен остаться.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.01.2015, 15:05  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Чтобы сравнить типы.
Требуется поддерживать ровно один тип, а не перебирать типы по разрядностям.

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
Если мы сделаем просто конструктор, который принимает uint64_t, то к нашему типу будут применимы все те правила преобразования, которые применимы к uint64_t.
Хотите сказать, что параметр конструктора может быть приведён не явно?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
02.01.2015, 15:11
Цитата Сообщение от taras atavin Посмотреть сообщение
Требуется поддерживать ровно один тип, а не перебирать типы по разрядностям.
Фактически только один тип и поддерживается. Смотри внимательней. Проверка не пропустит ничего кроме собственно uint64_t.
Цитата Сообщение от taras atavin Посмотреть сообщение
Хотите сказать, что параметр конструктора может быть приведён не явно?
По правилам разрешения перегрузки, естественно. Возьмем старый пример, уберем шаблонный конструктор, уберем проверку, и получим разрешение неявных преобразований из любых целых типов.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.01.2015, 15:50  [ТС]
Эйси. А как сделать конструктор и оператор привидения инлайновыми?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
02.01.2015, 16:07
Цитата Сообщение от taras atavin Посмотреть сообщение
А как сделать конструктор и оператор привидения инлайновыми?
В этом примере? Они и так инлайновые.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
04.01.2015, 09:55  [ТС]
В конце концов решил запретить неявное приведение параметров не конструктора, а самой функции и не заводить специальных типов:
C++
1
2
template <typename FormalType, typename FactType = typename std::enable_if<std::is_same<FormalType, uint64_t>::value>::type>
uint64_t ApplayMask (FormalType Packed, FormalType Mask)
. А теперь вопросы:
1. Я синтаксис не переврал?
2. Можно ли разделить по разным файлам прототип и реализацию?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
04.01.2015, 14:55
Цитата Сообщение от taras atavin Посмотреть сообщение
1. Я синтаксис не переврал?
Нет, все верно. Единственное, можно сделать код совместимым с C++03, если перенести проверку из параметра по-умолчанию функции (это появилось только в С++11) в возвращаемое значение.
C++
1
2
template <typename FormalType>
typename std::enable_if<std::is_same<FormalType, uint64_t>::value, uint64_t>::type ApplayMask (FormalType Packed, FormalType Mask);
Шаблон enable_if (в С++03 его нет в std:: ) реализуется тривиально. Но это конечно если нужна совместимость с С++03.

Цитата Сообщение от taras atavin Посмотреть сообщение
Можно ли разделить по разным файлам прототип и реализацию?
Можно. Т.к. фактический тип один, то можно перенести реализацию шаблона в cpp и сделать явное инстанцирование.
В cpp:
C++
1
2
3
4
5
6
7
8
template <typename FormalType>
typename std::enable_if<std::is_same<FormalType, uint64_t>::value, uint64_t>::type
    ApplayMask(FormalType Packed, FormalType Mask)
{
    // реализация
}
 
template uint64_t ApplayMask<uint64_t>(uint64_t Packed, uint64_t Mask); // явное инстанцирование для uint64_t
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.01.2015, 08:03  [ТС]
C++
1
2
3
4
5
6
7
8
template <typename FormalType>
typename std::enable_if<std::is_same<FormalType, uint64_t>::value, uint64_t>::type
    ApplayMask(FormalType Packed, FormalType Mask)
{
    // реализация
}
 
template uint64_t ApplayMask<uint64_t>(uint64_t Packed, uint64_t Mask); // явное инстанцирование для uint64_t
А не подскажите, что она здесь возвращает?

Добавлено через 13 минут
На строку
C++
1
template uint64_t ApplayMask<uint64_t>(uint64_t Packed, uint64_t Mask);
пишет:
C:\Projects\Test2\Test\Test.cpp|2|error: expected ';' before '<' token|
.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
07.01.2015, 15:34
Цитата Сообщение от taras atavin Посмотреть сообщение
А не подскажите, что она здесь возвращает?
Возвращает uint64_t как и задумано.
Цитата Сообщение от taras atavin Посмотреть сообщение
C:\Projects\Test2\Test\Test.cpp|2|error: expected ';' before '<' token
Компилятор и версия какая?
Возможно просто нужно убрать угловые скобки (хотя в принципе должно работать и так, т.е. что со скобками, что без)
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
32
33
34
35
36
37
38
39
40
41
#include <stdint.h>
 
// Здесь приведены реализации необходимых шаблонов для С++03
// [---]
template<bool B, class T = void>
struct enable_if {};
 
template<class T>
struct enable_if<true, T> { typedef T type; };
 
template<class T, class U>
struct is_same { enum { value = false };  };
 
template<class T>
struct is_same<T, T> { enum { value = true }; };
// [---]
 
 
// Это должно быть в h:
template <typename FormalType>
typename enable_if<is_same<FormalType, uint64_t>::value, uint64_t>::type 
    ApplayMask (FormalType Packed, FormalType Mask);
 
 
// Это должно быть в cpp:
template <typename FormalType>
typename enable_if<is_same<FormalType, uint64_t>::value, uint64_t>::type
    ApplayMask(FormalType Packed, FormalType Mask)
{
    // реализация
    return 0;
}
// явное инстанцирование
template uint64_t ApplayMask(uint64_t Packed, uint64_t Mask);
 
//........
 
int main()
{
    ApplayMask(uint64_t(2), uint64_t(3));
}
Вот компилируемый пример (без скобок у инстанции).
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.01.2015, 15:47  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Возможно просто нужно убрать угловые скобки
C:\Projects\Test2\Test\Test.cpp|2|error: expected ';' before 'uint64_t'|
....................
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
07.01.2015, 16:10
Цитата Сообщение от taras atavin Посмотреть сообщение
C:\Projects\Test2\Test\Test.cpp|2|error: expected ';' before 'uint64_t'|
Только что скачал компилятор и запустил вышеприведенный пример на TDM mingw64 4.8.1, насколько я понял у тебя именно эта версия. Все нормально компилируется как нужно. Ищи ошибку у себя.

И на будущее, когда у тебя спрашивают версию, надо просто скинуть вывод команды gcc -v, а не прикладывать кучу файлов, половина из которых даже не содержит нужной информации
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
07.01.2015, 16:15
Вот на всякий случай проект, на котором я проверял только что.
Вложения
Тип файла: zip test_templ.zip (2.2 Кб, 6 просмотров)
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.01.2015, 16:19  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
И на будущее, когда у тебя спрашивают версию, надо просто скинуть вывод команды gcc -v,
Куда её ввести?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
07.01.2015, 16:23
Цитата Сообщение от taras atavin Посмотреть сообщение
Куда её ввести?
Открываешь cmd.exe, заходишь в папку bin своего компилятора и там набираешь.
Если путь к папке bin добавлен в переменные откружения PATH, то набирать можно из любого места.
Выглядит это так:
Миниатюры
Не получается reinterpret_cast<uint64_t>  
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.01.2015, 16:28  [ТС]
Я не той версией компилил, но и той тоже хоть с <>, хоть без
C:\Projects\Test2\Test\Test.cpp|2|error: explicit instantiation of non-template 'uint64_t f'|
.

Добавлено через 40 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
Открываешь cmd.exe,
А что это?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
07.01.2015, 16:37
Цитата Сообщение от taras atavin Посмотреть сообщение
Я не той версией компилил, но и той тоже хоть с <>, хоть без
Показывай что компилируешь

Цитата Сообщение от taras atavin Посмотреть сообщение
А что это?
Шутить изволите?
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.01.2015, 16:41  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Шутить изволите?
Нет. Я действительно не знаю, где этот cmd брать и как его ставить.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.01.2015, 16:43  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Показывай что компилируешь
Test.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2015, 16:43

Модуль часов DS3231, преобразование UNIX TimeStamp uint32_t в uint64_t
Доброго времени суток! Имеется модуль часов DS3231, пользуюсь либой отсюда https://github.com/jarzebski/Arduino-DS3231 ...

Reinterpret_cast
Не могу понять к чему тут этот каст и каким образом он влияет на результат. char zxc = ((*(reinterpret_cast&lt;const...

reinterpret_cast
Подскажите плиз, чем отличается функция reinterpret_cast от static_cast? небольшой пример: const int MAX = 100; // размер буфера ...

Reinterpret_cast
Результат работы функции reinterpret_cast равен нулю. Почему и как исправить? (Кстати ещё буду рад, если объясните как можно уменшить...

reinterpret_cast<...>(...)
Всем привет! Сразу к делу. ВОПРОС: Как преобразовать переменную типа float в указатель типа double; КРАТКОЕ ОПИСАНИЕ...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru