【发布时间】:2011-06-21 12:03:03
【问题描述】:
我制作了两个函数将 32/64 位指针“转换”为双精度。该代码在单独使用时有效(仅 .h 和 .cpp 包括它),但是当在其他地方使用 .h 时(复制到项目目录中然后包含),对于 . 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) 来回调一个对象成员函数。
编辑2: Lua 提供了一种存储用户数据的方法,这似乎是一种足够的解决方案,而不是转换指针(参见 cmets)
【问题讨论】:
-
将指针指向 double 听起来像是一场等待发生的灾难。在 Lua 中查找“轻量级用户数据”。
-
我刚刚开始使用 Lua C api,但它只是飞过我。我会看看,因为这似乎是真正的解决方案。 (我知道双重施法是个笨蛋,但它奏效了;)
-
同意@interjay - 只有“用户数据”
标签: c++ visual-studio linker compiler-errors