此代码编译(使用GCC / C ++ 11):
void doStuff_HELPER(int a) { /**/ }
class SomeClass{
public:
void doStuff() {doStuff_HELPER( 10);}
};
这不是:
void doStuff(int a) { /**/ }
class SomeClass{
public:
void doStuff() {doStuff( 10);}
};
它没有说它不明确,或者它不能超载或只是说:"没有匹配的函数SomeClass :: doStuff(int)", "候选人:void SomeClass :: doStuff()"。这是正确的行为吗?标准对此有何看法?
(另外,这种辅助函数的最佳实践是什么?它们应该放在一个单独的命名空间中吗?)
答案 0 :(得分:3)
明确指定范围:::doStuff(10);
答案 1 :(得分:2)
您应该使用Scope Resolution Operator来解决此问题。使用::doStuff(10)
代替doStuff(10)
告诉编译器查看全局命名空间以解决名称冲突。