类似的问题 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 不能用来区分函数重载。
问题是,有没有办法解决这个问题?
最佳答案
bool
和 int
可以 用于区分函数重载。正如人们所期望的那样,bool
参数将更喜欢 bool
重载和 int
参数 - int
重载。
从错误信息来看(我假设你的问题的标题是你得到的错误信息的一部分),你正在处理的是你提供的参数既不是 bool
也不是 int
,但是到 bool
和 int
的转换存在并且具有相同的等级。
例如,考虑这个
void foo(bool);
void foo(int);
int main() {
foo(0); // OK
foo(false); // OK
foo(0u); // ERROR: ambiguous
}
前两个调用将以预期的方式成功解决。第三次调用不会解析,因为参数类型实际上是 unsigned int
,但是它支持对 bool
和 int
的隐式转换,从而使叫模棱两可。
你如何调用你的函数?向我们展示您要传递的论点。
关于c++ - 2个重载有相似的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723112/