Я сделал две функции для «приведения» 32 / 64-битный указатель на двойной. Код работал, когда использовался отдельно (только .h и .cpp, включая его), но при использовании .h где-то еще (скопирован в каталог проекта и затем включен) ith выдает ошибку «уже определено» для всех функций в файле .h при связывании.
исходный код для файла .h следующий:
#pragma once
#ifndef __FLOATCAST_H
#define __FLOATCAST_H
//A quick and dirty way of casting pointers into doubles and back
//Should work with BOTH 64bit and 32bit pointers
union ptr_u {
double d;
void* p;
};
double ptr2double(void* pv){
ptr_u ptr;
ptr.p = pv;
return (ptr.d);
};
void* double2ptr(double dv){
ptr_u ptr;
ptr.d = dv;
return(ptr.p);
};
#endif
В ссылке говорится, что функции уже определены в исходном файле файла (скорее, его .obj) который не включает этот.
Изменить: Зачем мне нужен указатель внутри двойника? Потому что мне нужен Lua (5.1) для обратного вызова функции-члена объекта.
Edit2: Lua предоставляет способ хранения пользовательских данных, это похоже на адекватное решение, а не на приведение указателя (см. Комментарии)