определение функции члена рекурсивного пространства имен - PullRequest
0 голосов
/ 24 января 2019
/******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 голосов
/ 24 января 2019

Когда вы делаете using namespace graph;, вы вытягиваете все символы из пространства имен graph в текущее пространство имен.Но он не работает противоположным образом, он не «проталкивает» следующие глобальные символы в пространство имен graph.

Поэтому ваше определение функции объявляет и определяет функцию dfs в global namespace.

Вам необходимо добавить префикс определения функции к пространству имен:

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