2016-06-07 67 views
-2

我使用的叠层,它定义这些类型的标签和功能:C++函数是不明确的使用类型时标签

typedef const char * FONAFlashStringPtr; 
typedef uint8 boolean; // uint8 is replaced with unsigned char 

void HTTP_para_start(FONAFlashStringPtr parameter, boolean quoted = true); 

调用我使用FONAFlashStringPtr和真/假,这是1定义了功能时和0,但我得到这个输出:

'HTTP_para_start' is ambiguous ' Candidates are: void HTTP_para_start(const char *, unsigned char)

无法得到为什么它令人不快,它们是相同的类型。编译器不应该通过类型标签?

编辑

它结束了作为一个Eclipse的错误,项目 - >清洁没有解决,但工作区重新做。

+5

您需要包含错误的下一行。注意:“候选人”应该有2个或更多的功能列出。 –

回答

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以供参考)。

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

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

“不要定义宏”。但是OP没有那样做。 – Bathsheba

+0

@Bathsheba他确定'true'为1,'false'为0 –

+0

我读到,OP *思维*,'true'和'false'是这样定义的,有点像他们在C.但是,无论如何要有一个满意的答案。 – Bathsheba

相关问题