【发布时间】:2014-10-19 06:53:12
【问题描述】:
在我的代码中,Graph 是一个具有成员 node 的类,它是一个结构。当我这样做时
unsigned int id = ((unsigned int)n - (unsigned int)_nodes) / sizeof(Graph::node);
我收到以下错误(在 64 位 Linux 上编译):
error: cast from ‘Graph::node* {aka Graph::node_st*}’ to ‘unsigned int’ loses precision [-fpermissive]
谷歌搜索并找到了similar question,但在我看来答案不适用于此处(请注意,我想获取对象的大小而不是自身)。
提前感谢您的任何建议!
【问题讨论】:
-
你为什么要把指针指向
unsigned long? -
如果
n和_nodes都是指向Graph::node的指针,并且都指向同一个内存区域,那么您不必进行任何转换。 -
您将 64 位指针投射到
unsigned int,这很可能是 32 位。 -
在(大多数)64 位 Linux 上,指针是 64 位长,无符号整数是 32 位长。所以错误信息是完全正确的。
-
问题已解决。非常感谢 0x499602D2、Joachim、Jonathan 和 Tom 的 cmets。