我回到了我实现二叉树的旧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
public:
之后的每一行都会发出如下警告:
&#34; SymTab.hpp:11:9:警告:不推荐使用访问声明 赞成使用声明;建议:添加'使用'关键字 [-Wdeprecated] Tree :: Insert;&#34;,其中&#34; Insert被替换 与每个相应的功能名称。
有关命名空间的任何建议以及如何摆脱这些警告?
答案 0 :(得分:7)
有两个不同的问题。编译器正在讨论的是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;
};
另一个完全不相关的问题是头文件中的using namespace std;
。这不是错误本身,而是错误想法 TM 。它会导致整个std
命名空间被转储到包含该标头的每个人的全局命名空间中,并且他们无法对它做任何事情。它可能导致与一些常见的名称冲突在transform
命名空间中定义的list
,sort
或std
等名称。只需删除using
指令。