在我的代码中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]
用Google搜索并找到similar question,但在我看来答案在这里并不适用(请注意,我想获得对象的大小,但不是自己)。
提前感谢您的任何建议!
答案 0 :(得分:2)
如果n
和_nodes
指向Graph::node
,即它们属于Graph::node *
类型(错误消息中似乎是这种情况),并且如果你要根据Graph::node
元素的数量来计算两者之间的“距离”,你可以这样做:
unsigned int id = n - _nodes;
在C和C ++中,指针运算将导致差异是元素的数量(而不是字节数)。
为了便于移植,n
和_nodes
都必须指向Graph::node
值的连续块,而n
应该在“{{1}之后” }。如果您可以获得负面差异,则可以使用_nodes
类型而不是ptrdiff_t
。
答案 1 :(得分:1)
first answer in the SO post you have a link to提供了一个适合您的答案。
使用
intptr_t id = ((intptr_t)n - (intptr_t)_nodes) / sizeof(Graph::node);