Мне нужно использовать функцию floorf (), определенную в Math.h, и хотя я могу скомпилировать модуль, где он успешно используется в моем проекте XE4, я получаю эту ошибку при компоновке:
[ilink32 Error] Error: Unresolved external '_floorf' referenced from <myfilename>.OBJ
[ilink32 Error] Error: Unable to perform link
Это не имеет смысла — компилятор, очевидно, знает, где объявлена функция, так как он открывает Math.h, когда я нажимаю клавишу control на функции floorf (). и я включил #include в файл .cpp. Что мне нужно, чтобы это работало? Мне действительно нужно использовать эту стандартную математическую функцию.
1
Решение
Другие решения
Я использую BDS2006, так что это может не помочь, но:
- попробуй использовать
floor()
вместо floorf()
- если у вас есть проблемы с неоднозначностью, используйте
float(floor(float(x)));
- попробуйте включить вместо или наоборот, чтобы увидеть, если это помогает
- Вы используете какое-либо пространство имен? (попробуй использовать
::floor()
)
- ты не забыл некоторые
;
,{
,}
,};
? особенно в struct
/class
/namespace
- ты используешь
#define
с?
- У borland / embarcadero иногда возникают проблемы с кодом внутри определений
- очень редко это неправильно компилируется, поэтому код не работает так, как написано
- видел это несколько раз, как правило, замена / вставка некоторых строк (даже пустых) помогает
- где вы используете функцию floorf (файл cpp, модуль или форма)?
- если вы добавите файл модуля в проект (с вашим собственным материалом, а не с кодом окна / формы)
- тогда предполагается, что это VCL / машинно-сгенерированный материал, такой как Form, а не стандартный файл C / C ++.
- и это скомпилировано / связано по-разному
- если это так, удалите файл из проекта
- и добавьте include этого файла в один из файлов Form cpp / h, где это необходимо
- Я видел это поведение в BCB5, BCB6, BDS2006
- ты используешь немного
#define
Это противоречит математическим жетонам внутренней компиляции?
- некоторые определения могут быть использованы внутри, чтобы включить // отключить части кода внутри математики
- так что если вы определите то же самое до математического включения, вы можете связываться с ним
- не используйте токены как
_math
,_floor
…
- как вы называете свои собственные функции
- если они сталкиваются с VCL имена то странные вещи начинают происходить
- типичное является собственным
Draw()
функции со столкновением с внутренним TForm::Draw
- об ошибке не сообщается, но иногда код не работает (даже если операнды вызова не совпадают)
- последний раз видел это на BCB6
- просто переименуйте их в
draw()
и вы будете в порядке, если вы не привязаны к какой-либо схеме именования
Я держал пари, что точка 6 видела это много-много раз назад во время моего обучения
0