递归名称空间成员函数定义

时间:2019-01-24 08:56:15

标签: c++ recursion namespaces implementation

/******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”那样称呼它们,那不会给我错误。但是为什么呢?

1 个答案:

答案 0 :(得分:4)

当您执行using namespace graph;时,会将所有符号从命名空间graph拉入当前命名空间。但这并非相反,它不会将全局符号“推”到graph名称空间中。

因此,您的函数定义是在 global 命名空间中声明和定义函数dfs

您需要在函数定义之前添加名称空间:

void graph::dfs(...) { ... }