考虑以下 c++ 代码
class A
{
public:
void doStuff() {};
void callStuff()
{
doStuff(true);
doStuff();
};
private:
void doStuff(bool doIt = false) {};
};
int main()
{
A a;
a.doStuff();
a.callStuff();
return 0;
}
毫不奇怪,GCC 在编译时给出了几个错误:
重载.cpp:在成员函数'void A::callStuff()'中: 重载.cpp:8:10:错误:重载“doStuff()”的调用不明确 做东西(); ^ 过载.cpp:8:10:注意:候选人是: 重载.cpp:4:12:注意:无效 A::doStuff() 无效 doStuff() {}; ^ 重载.cpp:11:12: 注意: void A::doStuff(bool) 无效 doStuff(bool doIt = false) {}; ^ 重载.cpp:在函数'int main()'中: 重载.cpp:17:17:错误:重载“doStuff()”的调用不明确 a.doStuff(); ^ 过载.cpp:17:17:注意:候选人是: 重载.cpp:4:12:注意:无效 A::doStuff() 无效 doStuff() {}; ^ 重载.cpp:11:12: 注意: void A::doStuff(bool) 无效 doStuff(bool doIt = false) {}; ^
我有几个问题:
- 如何告诉编译器我想使用哪个重载?我会被迫删除其中一个吗?
- 如果我必须删除其中一个,如何在编译时找到这个问题而不尝试调用重载?只要我不调用它们,一切都应该编译得很好,所以我以后可能会发现,一旦我试图调用它,我就无法调用我添加的重载。
- 为什么会出现第二个错误?该
main
函数不应该能够访问私有重载,因此它应该知道使用哪一个。