Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2020, 17:30   #1
Voldemus_
Новичок
Джуниор
 
Регистрация: 30.09.2020
Сообщений: 1
По умолчанию Ошибка при вызове функции

Добрый день

Объявлена функция

Код:
uint32_t* decrypt(uint32_t* v, uint32_t* k)
{
/* set up */
uint32_t v0 = v[0];
uint32_t v1 = v[1];
uint32_t sum = 0xC6EF3720;
uint32_t i;

/* a key schedule constant */
uint32_t delta = 0x9e3779b9; // Константа ? была выведена из Золотого сечения ? = ({\displaystyle {\sqrt {5}}}{\sqrt {5}} — 1) * 231 = 2654435769 = 9E3779B9h[2]

/* cache key */
// 128 - битный ключ К делится на четыре 32 - битных подключа K[0], K[1], K[2] и K[3]
uint32_t k0 = k[0];
uint32_t k1 = k[1];
uint32_t k2 = k[2];
uint32_t k3 = k[3];

/* basic cycle start */
for (i = 0; i < 32; i++)
{
// Операции, обратные шифрованию
v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
sum -= delta;
}
/* end cycle */

v[0] = v0;
v[1] = v1;
return v;
}
В Unit0.h прописал __fastcall encrypt(unsigned int* v,unsigned int* k); по этой причине компилятор выдает сообщение об ошибке (см. вложение). Если прописать __fastcall encrypt(uint32_t* v, uint32_t* k);, то компилятор указывает на ошибку в этой строке.

Что делать ?
Изображения
Тип файла: png 2020-09-30_165600.png (638 байт, 30 просмотров)

Последний раз редактировалось BDA; 30.09.2020 в 18:52.
Voldemus_ вне форума Ответить с цитированием
Старый 05.10.2020, 23:32   #2
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Voldemus_ Посмотреть сообщение
Объявлена функция
А какие параметры вы передаёт в функцию? Вы бы показали чтобы пользователям понятно было. Походу если тупо функцию скомпилировать проблем быть не должно потому что функция не участвует в расчётах.
Loksiin12 вне форума Ответить с цитированием
Старый 06.10.2020, 07:24   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

возвращаемое значение то нужно укзать
Цитата:
Сообщение от Voldemus_ Посмотреть сообщение
uint32_t* encrypt(uint32_t* v, uint32_t* k);
Алексей1153 вне форума Ответить с цитированием
Старый 06.10.2020, 21:27   #4
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Вы новичок в этом? Я прошу чтобы вы показали как вы вызываете эту функцию. Потому что сама функция написана правильно, но у меня таких типов как uint32_t нет, или подключить что-то нужно или компилятор нужен более новый т.к. у меня 98ой стандарт на нём уже никто не программирует. И я вас прошу чтобы вы показали как вы вызываете эту функцию и какие расчёты передаёте. Я не знаю правильно ли считает ваша функция, но это второстепенный вопрос он не имеет значения нам интересно почему у вас ошибка учитывая то что функция составлена правильно. Из функции вы хотите вернуть этот указатель
Код:
uint32_t* v ....return v;
.

Последний раз редактировалось Loksiin12; 06.10.2020 в 21:29.
Loksiin12 вне форума Ответить с цитированием
Старый 06.10.2020, 21:35   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Loksiin12, да, типы фиксированной длины появились в более новых стандартах

но у ТС ошибка очевидна:

в реализации
uint32_t* encrypt(uint32_t* v, uint32_t* k)

в хедере:
__fastcall encrypt(uint32_t* v, uint32_t* k);
- по умолчанию стал тип __fastcall int, на что и ругается компилятор. Если бы дело дошло до линковки, то и он бы тоже ругался

Нужно в обоих случаях указать одинаково: __fastcall uint32_t*
Алексей1153 вне форума Ответить с цитированием
Старый 06.10.2020, 21:37   #6
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

а, ну и да - decrypt с encrypt не перепутать ))
Алексей1153 вне форума Ответить с цитированием
Старый 06.10.2020, 21:39   #7
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
__fastcall
А что это за спецификатор такой? Я такие ещё не использовал. Он её вызывает в каком-то интересном месте.
Loksiin12 вне форума Ответить с цитированием
Старый 06.10.2020, 22:00   #8
petya11
Пользователь
 
Регистрация: 27.09.2019
Сообщений: 68
По умолчанию

У вас где-то Не сработало по умолчанию приведение типов. Это написано в ошибке.

Слишком мало кода, чтобы сказать где.

Скорее всего допущена семантическая ошибка(код делает не то, что вы предполагаете, потому что, то что написано в коде, языком C++ не предполагается для выполнения в том смысле, котором вам нужно). Где-то (возможно Неявно) вы "пихаете" int, а компилятору нужен unint, но его(С++) Неявное конвертирование не может конвертировать ваш int, в нужный unint.
petya11 вне форума Ответить с цитированием
Старый 06.10.2020, 23:20   #9
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от petya11 Посмотреть сообщение
int, в нужный unint.
у него ошибка
Код:
int на *int
. Пользователь выше объяснил почему. так что в принципе вопрос решён. А вот правильно оно считает или нет это уже проблема автора. Да я тоже выше писал чтобы он показал как и в чём он вызывает эту функцию и что туда передаёт. Видимо автор уже решил сам эту проблему раз молчит.
Loksiin12 вне форума Ответить с цитированием
Старый 07.10.2020, 08:10   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
А что это за спецификатор такой
соглашение о вызове функции https://ru.wikipedia.org/wiki/%D0%A1...D0%B5#fastcall

считается частью сигнатуры функции, поэтому для компилятора важно, чтобы сигнатура в объявлении и определении совпадала
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вызове функции Vilkas Помощь студентам 2 19.12.2014 06:18
Ошибка при вызове табличной функции в SQL Server Ilyard SQL, базы данных 1 05.04.2014 21:38
Ошибка линковки при вызове функции другой библиотеки revaldo666 Общие вопросы C/C++ 2 23.07.2012 16:45
Ошибка при вызове функции Access violation Hottabych Win Api 1 22.01.2011 20:35
Ошибка при вызове хранимой функции MySQL tavrocotaps Общие вопросы .NET 0 23.04.2010 10:25