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


C++ function is ambiguous when using type labels

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

1
2
3
4
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' is ambiguous ' Candidates are: void
HTTP_para_start(const char *, unsigned char)

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

编辑

结果是一个Eclipse错误,Project->Clean没有解决,但是工作区重启解决了。


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

例如,以下错误相同:

1
2
3
4
5
6
7
8
9
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++获得EDCOX1×1,使用它。并且不要定义隐藏内置关键字的宏(请参阅此答案以供参考)。

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

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