与此类似的问题 C++ Function Overloading Similar Conversions 已被问及我理解问题的一般前提。寻找解决方案。
我有2个重载函数:
virtual IDataStoreNode* OpenNode(const char *Name, bool bCreateIfNotExist,int debug=0) { return 0;
}
virtual IDataStoreNode* OpenNode(const char* Name,int debug=0) const { return 0; }
从错误中可以看出bool和int不能用于区分函数重载。
问题是,有没有办法解决这个问题?
答案 0 :(得分:11)
bool
和int
可以用于区分函数重载。正如人们所料,bool
参数更倾向于bool
重载和int
参数 - int
重载。
根据错误消息判断(我假设您的问题的标题是您收到的错误消息的一部分),您所处理的是您提供的参数既不是bool
也不是{的情况{1}},但转化为int
和bool
并且排名相同。
例如,请考虑这个
int
前两个调用将以预期方式成功解析。第三个调用将无法解决,因为参数类型实际上是void foo(bool);
void foo(int);
int main() {
foo(0); // OK
foo(false); // OK
foo(0u); // ERROR: ambiguous
}
,但它支持对unsigned int
和bool
的隐式转换,从而使调用变得模糊。
你是如何称呼你的职能的?向我们展示你想要传递的论据。
答案 1 :(得分:3)
对于以下功能:
virtual IDataStoreNode* OpenNode(const char *Name, bool bCreateIfNotExist,int debug=0) { return 0; }
virtual IDataStoreNode* OpenNode(const char* Name, int debug=0) const { return 0; }
以下调用(例如,可能还有其他调用)将不明确:
unsigned int val = 0; //could be double, float
OpenNode("", val);
由于unsigned int
可以同时转换为bool
和int
,因此存在歧义。解决问题的最简单方法是将参数转换为首选重载中参数的类型:
OpenNode("", (bool)val);
OR
OpenNode("", (int)val);