c++:重载2个函数,一个在头文件中,一个不在

C++: overloading with 2 functions, one in the header file, one is not

本文关键字:一个 文件 重载 c++ 函数 2个      更新时间:2023-10-16

假设我声明(在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); 
} 

问题是单参数版本被定义为类成员,而双参数版本是自由函数。当编译器试图寻找候选调用时,它不会混合不同的作用域,所以它只看到类作用域的版本,然后尝试根据参数选择最佳的重载。

只需调用::f(x, y),它将在全局作用域中查找自由函数。注意,自由函数是否在头文件中声明并不重要。编译器仍然找不到

相关文章: