我必须重载函数:
void wypisz(unsigned int32 x, int n = 1);
void wypisz(unsigned char x, int n = 1);
这里是我提出它们的代码:
main()
{
wypisz((int32)(32), 7);
wypisz('a', 7);
return 0;
}
当我尝试使用G ++编译它时,我收到一个错误:
test.cpp:在函数“
int main()
”中:test.cpp:10:21:错误:重载'
wypisz(int, int)
'的调用是 含糊不清的wypisz((int)(32), 7);
test.cpp:10:21:注意:候选人是:
test.cpp:5:6:注意:
void wypisz(unsigned int, int) void wypisz(unsigned int x, int n = 1);
test.cpp:6:6:注意:
void wypisz(unsigned char, int) void wypisz(unsigned char x, int n = 1);
当我删除未签名时,它将编译正常。
有没有办法调用这个方法 - 我应该在call语句中更改?不幸的是,我无法改变声明中的任何内容=他们必须保持原样。
答案 0 :(得分:2)
问题在于,在您的函数调用中,您正在转换为[{"id":1},
{"id":2,"children":[{"id":3},
{"id":4},
{"id":5,"children":[{"id":6},
{"id":7},
{"id":8}
]
},
{"id":9},
{"id":10,"children":[{"id":11,"children":[{"id":12}]}]}]}
]
,它既不是int32
也不是unsigned char
。实际上,它可以隐式地转换为它们中的任何一个(编译器可以自动转换它)。但是,因为它可以自动将其转换为 ,所以它并不知道将转换为,这就是调用不明确的原因。
要明确地调用该方法,只需将其转换为unsigned int32
:
unsigned int32
现在,编译器不必进行任何隐式转换,因为存在完全匹配。相反,它只是调用正确的函数。