不推荐使用访问声明,而是使用声明;建议:添加'使用'关键字

时间:2014-06-18 15:51:16

标签: c++ tree namespaces binary-tree

我回到了我实现二叉树的旧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被替换   与每个相应的功能名称。

有关命名空间的任何建议以及如何摆脱这些警告?

1 个答案:

答案 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命名空间中定义的listsortstd等名称。只需删除using指令。