/******header file*****/
namespace graph{
void dfs(...);
};
/******cpp file******/
#include "graph.h"
using namespace graph;
void dfs(...){
//some code here
//dfs(...); <-- wrong
//graph::dfs(...); <-- it was fine,until i call the function from main.cpp
}
当我在实现文件中定义递归函数时,它在递归调用行上给了我错误。如果我将其更改为“ graph :: dfs(...)”,它不会给我错误,但是如果我从main.cpp调用该函数,它仍然会给我错误。如果我不使用“使用名称空间图”并像“ graph :: dfs”那样称呼它们,那不会给我错误。但是为什么呢?
答案 0 :(得分:4)
当您执行using namespace graph;
时,会将所有符号从命名空间graph
拉入当前命名空间。但这并非相反,它不会将全局符号“推”到graph
名称空间中。
因此,您的函数定义是在 global 命名空间中声明和定义函数dfs
。
您需要在函数定义之前添加名称空间:
void graph::dfs(...) { ... }