问题描述
我有一个名字ns。在ns中,我定义了一个类和一个函数。我进一步将函数定义为该类的朋友,以便该函数可以访问该类的私有变量。在主程序中,我成功调用了该函数,而未使用ns ::对其进行限定。有关详细信息,请参见代码。
#include <iostream>
namespace ns {
class MyClass;
void print_fn(const MyClass & c);
}
namespace ns {
class MyClass {
private:
int _a;
public:
MyClass(int a): _a(a) {}
friend void print_fn(const MyClass & c);
};
void print_fn(const MyClass & c){
std::cout << c._a << std::endl;
}
}
int main()
{
ns::MyClass c(10);
print_fn(c);
return 0;
}
解决方法
这称为参数依赖查找。
编译器在声明其参数的名称空间中搜索该函数。
您可以通过以下方式禁用与参数相关的查找
( print_fn )(c);
在这种情况下,编译器会发出错误消息,找不到函数print_fn
。