不能使用与成员函数同名的辅助函数

时间:2018-02-15 20:43:09

标签: c++

此代码编译(使用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()"。这是正确的行为吗?标准对此有何看法?

(另外,这种辅助函数的最佳实践是什么?它们应该放在一个单独的命名空间中吗?)

2 个答案:

答案 0 :(得分:3)

明确指定范围:::doStuff(10);

答案 1 :(得分:2)

您应该使用Scope Resolution Operator来解决此问题。使用::doStuff(10)代替doStuff(10)告诉编译器查看全局命名空间以解决名称冲突。