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

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被每个相应的函数替换名称.

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

Rei*_*ica 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;
};
Run Code Online (Sandbox Code Playgroud)

另一个完全不相关的问题是using namespace std;在头文件中.这不是一个错误本身,而是一个坏主意TM.它会导致整个std命名空间被转储到包含该标头的每个人的全局命名空间中,并且他们无能为力.并且它可能导致与一些常见名称transform(listsortstd命名空间中定义的名称冲突)的精彩名称冲突.只需删除该using指令即可.