use*_*325 4 c++ tree binary-tree namespaces
我回到了我实现二叉树的旧C++学校作业之一.我有一个文件(Tree.cpp),其中包含插入,查找,删除等节点的功能.在顶部,我有"using namespace std;".我得到的警告是由另一个文件SymTab.hpp引起的,如下所示:
#ifndef SYMTAB_H
#define SYMTAB_H
#include <iostream>
#include "Tree.hpp"
using namespace std;
template <class Whatever>
class SymTab : private Tree<Whatever> {
public:
Tree<Whatever> :: Insert;
Tree<Whatever> :: Lookup;
Tree<Whatever> :: Remove;
Tree<Whatever> :: Write;
Tree<Whatever> :: Set_Debug_On;
Tree<Whatever> :: Set_Debug_Off;
};
#endif
Run Code Online (Sandbox Code Playgroud)
每条线后public:都会发出警告:
"SymTab.hpp:11:9:警告:不推荐使用访问声明,而使用声明;建议:添加'using'关键字[-Wdeprecated] Tree :: Insert;",其中"Insert被每个相应的函数替换名称.
关于命名空间的任何建议以及如何摆脱这些警告?
有两个不同的问题.编译器正在讨论的是"访问声明" SymTab.只需将其更改为:
template <class Whatever>
class SymTab : private Tree<Whatever> {
public:
using Tree<Whatever> :: Insert;
using Tree<Whatever> :: Lookup;
using Tree<Whatever> :: Remove;
using Tree<Whatever> :: Write;
using Tree<Whatever> :: Set_Debug_On;
using Tree<Whatever> :: Set_Debug_Off;
};
Run Code Online (Sandbox Code Playgroud)
另一个完全不相关的问题是using namespace std;在头文件中.这不是一个错误本身,而是一个坏主意TM.它会导致整个std命名空间被转储到包含该标头的每个人的全局命名空间中,并且他们无能为力.并且它可能导致与一些常见名称transform(list或sort在std命名空间中定义的名称冲突)的精彩名称冲突.只需删除该using指令即可.