gpt4 book ai didi

c++ - 访问声明已弃用,取而代之的是使用声明;建议 : add the ‘using’ keyword

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:53 24 4
gpt4 key购买 nike

我回到了我以前的 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: 之后的每一行都给出如下警告:

"SymTab.hpp:11:9: warning: access declarations are deprecated in favour of using-declarations; suggestion: add the ‘using’ keyword [-Wdeprecated] Tree :: Insert;", where "Insert is replaced with each respective function name.

关于命名空间以及如何消除这些警告有什么建议吗?

最佳答案

有两个不同的问题。编译器正在谈论的是 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 命名空间被转储到包含该 header 的每个人的全局命名空间中,并且他们对此无能为力。并且它可能导致奇妙的名称冲突带有一些常见的名称,如 transformlistsort,它们在 std 命名空间中定义。只需删除 using 指令即可。

关于c++ - 访问声明已弃用,取而代之的是使用声明;建议 : add the ‘using’ keyword,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com