为什么我的重载成员函数仅作为字符“模糊”而不是int和字符串?
我试图通过重载的equals()函数将代码集中到我的Char类中,以创建一个代码路径。当我将equals用作int和string,但将其作为char含糊时,它可以正常工作。
class Char
{
private:
char cData;
int iData;
string sData;
public:
//Mutators:
void equals(char c);
void equals(int c);
void equals(string c);
//Constructors:
Char(char c);
Char(int c);
Char(string c);
};
void Char::equals(char c)
{
cData = c;
}
void Char::equals(int c)
{
iData = c;
}
void Char::equals(string c)
{
sData = c;
}
Char::Char(char c)
{
this->equals(c); //Call to member function 'equals' is ambiguous
}
Char::Char(int c)
{
this->equals(c);
}
Char::Char(string c)
{
this->equals(c);
}
该错误仅发生在char上,这很混乱,因为string可以正常工作。我希望它能对所有人都起作用,因为到目前为止一直如此。
答案 0 :(得分:0)
您可以使用单个#?
方法来接受equal
或char
。喜欢
int
答案 1 :(得分:0)
这是模棱两可的,因为如果这样做的话
Char c(42);
编译器不知道应调用char
还是int
构造函数。两者都是很好的搭配。
equals(123);
也是如此。同样,char
和int
重载都匹配,并且编译器无法告诉您要调用哪个。