使用类型标签时C++函数不明确

C++ function is ambiguous when using type labels

本文关键字:C++ 函数 不明确 标签 类型      更新时间:2023-10-16

我正在使用定义这些类型标签和函数的堆栈:

typedef const char * FONAFlashStringPtr;
typedef uint8 boolean; // uint8 is replaced with unsigned char
void HTTP_para_start(FONAFlashStringPtr parameter, boolean quoted = true);

调用函数时,我使用 FONAFlashStringPtr 和 true/false,它们为 1 和 0 定义,但我得到以下输出:

"HTTP_para_start"是模棱两可的 "候选人是:无效 HTTP_para_start(常量字符 *,无符号字符)

不明白为什么会失败,它们是同一类型。编译器不应该遍历类型标签吗?

编辑

它最终成为一个Eclipse错误,Project -> Clean没有解决它,但工作区重新启动解决了。

HTTP_para_start也在其他地方声明,签名略有不同。您有两个声明,而不仅仅是一个。因此,你没有显示整个代码,也没有显示所有错误:你的问题有缺陷。模棱两可的呼叫将列出两个或多个候选人,而不仅仅是一个。

例如,以下操作失败并显示相同的错误:

typedef const char * FONAFlashStringPtr;
typedef unsigned char boolean; // uint8 is replaced with unsigned char
void HTTP_para_start(FONAFlashStringPtr parameter, boolean quoted = true) {}
void HTTP_para_start(FONAFlashStringPtr parameter, bool quoted = true) {}
int main() {
   HTTP_para_start("", 1); // you say you define true to be 1
}

一般来说,由于您编写的是C++而不是 C,因此创建其他类似布尔值的类型是没有意义的。C++bool,使用它。并且不要定义隐藏内置关键字的宏(请参阅此答案以供参考)。

至少,truefalse的宏不正确:它们是整数,而不是无符号字符!如果这是 C,您可以拥有:

#define true ((unsigned char)1)
#define false ((unsigned char)0)