我正在使用一个定义这些类型标签和函数的堆栈:
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(const char *,unsigned char)
无法理解它为何令人心烦意乱,它们属于同一类型。编译器不应该通过类型标签吗?
修改
它最终成为一个Eclipse bug,Project - >干净没有解决它,但工作区重启确实。
答案 0 :(得分:1)
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
,使用它。 不定义影响内置关键字的宏(请参阅this answer以供参考)。
至少,true
和false
的宏不正确:它们是整数,而不是无符号字符!如果这是C,你可以:
#define true ((unsigned char)1)
#define false ((unsigned char)0)