C++:使用2个函数重载,一个在头文件中,一个不是

A L*_*A L 2 c++ overloading header-files

假设我在一个头文件中声明了(在c ++,VS 2010中)一个名为" void f(int x) " 的函数,然后在相应的cpp文件上实现它.在尝试仅在该源文件中添加重载函数(void f(int x,int y))时(标题中没有声明),我收到错误" 函数不带2个参数 ".
(此函数写在调用函数之上).

头文件没有任何实现的代码.

我是否违反了某些c ++规则,或者仅仅是因为使用了Visual?我必须在头文件中声明所有重载函数(或根本没有)吗?

编辑:源文件:

int findNodeRec(int data, NodeTree *root) 
{ 
    return 1;
}
int Tree::findNodeRec(int data) 
{ 
    return findNodeRec(data, m_root); 
} 
Run Code Online (Sandbox Code Playgroud)

Mar*_*k B 7

问题是一个参数版本被定义为类成员,而两个参数版本是一个自由函数.当编译器试图找到要调用的候选者时,它不会混合不同的范围,因此它只能看到类范围版本,然后尝试根据参数选择最佳的重载.

只需调用::f(x, y)它,它将在自由函数的全局范围内查找.请注意,如果在标题中声明了自由函数,则无关紧要.编译器仍然无法找到它.

  • 自动+1用于心灵疑难解答. (4认同)