gpt4 book ai didi

两个不同函数签名的 C++ 重新定义错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:41:06 26 4
gpt4 key购买 nike

我有一个类型,morton_id_t,它是一个 64 位数字。我有第二种类型,它是 Morton ID 的位的串联。 (morton_id_t) 有几个位,其中包含有关树中级别的信息:

typedef uint64_t morton_id_t;
typedef uint64_t morton_id_lvl_t;

#define BITS (sizeof(morton_id_lvl_t) * 8)

// number of bits to store the level
#define LEVEL_BITS 6
#define LEVEL_MASK ((1 << LEVEL_BITS) - 1)

// utility functions to pull the level or morton id out of a morton_id_lvl_t
lvl_t level(morton_id_lvl_t n);
morton_id_t morton_id(morton_id_lvl_t n);

// this just strips off the level bits using the `morton_id` function...
bool isAncestor(morton_id_lvl_t ancestor, morton_id_lvl_t descendent);

// ...and calls this
bool isAncestor(morton_id_t ancestor, morton_id_t descendent);

morton_id_t 只是 typedef 来自 uint64_t,尽管我只需要 64 - 6 级位。

编译器抛出错误,指出第二个 isAncestor 定义重新定义了第一个,即使类型签名不同。

我如何定义两个不同的 isAncestor 函数,其中一个接受 morton_id_lvl_t,另一个接受 morton_id_t ?

我需要使用类而不是 typedef 吗?

最佳答案

morton_id_tmorton_id_lvl_t 相同,所以 isAncestor 签名也相同。

typedef 不会创建新类型,而是现有类型的别名。

关于两个不同函数签名的 C++ 重新定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com