提问人:KcFnMi 提问时间:2/11/2023 最后编辑:Vlad from MoscowKcFnMi 更新时间:2/11/2023 访问量:306
在类中使用声明是指 'std::',它不是类 [duplicate]
Using declaration in class refers into 'std::', which is not a class [duplicate]
问:
我试图忘记,考虑 https://www.youtube.com/watch?v=MZqjl9HEPZ8using namespace std
所以我试过了
// using namespace std;
struct Data
{
using std::shared_ptr;
shared_ptr<char[]> m_name = nullptr;
// std::shared_ptr<char[]> m_name = nullptr;
};
从中我得到了
main.cpp:14:11:在类中使用声明引用“std::”,它不是一个类
似乎我不能在类内声明?using std::shared_ptr;
我是否遗漏了什么或真的需要在那里输入?std::shared_ptr
答:
来自 C++ 17 标准(10.3.3 使用声明)
3 在用作成员声明的 using-declaration 中,每个 using-declarator 的 nested-name-specifier 应将基类命名为 正在定义的类。如果 using 声明器命名构造函数, 其 nested-name-specifier 应命名该类的直接基类 被定义。
std::shared_ptr
不是代码示例中类的基类的成员。Data
因此,编译器发出错误。
std:;shared_ptr
是在命名空间中声明的类。它甚至不是某个类的成员。std
某些形式的在班级机构中不起作用。这包括 和 where 不是从基类继承的。using
using namespace
using X
X
using std::shared_ptr;
如果将其移动到全局范围,则有效。
using X = Y;
在类范围内工作。就您而言,它将是 .但请注意,在极少数情况下,它与拼写为略有不同(例如,将其传递给模板模板参数时)。template <typename T> using shared_ptr = std::shared_ptr<T>;
std::shared_ptr
[我]真的需要在那里打字吗?
std::shared_ptr
您应该键入 。省略通常会引起混淆。“是来自什么东西还是习俗?”std::shared_ptr
std::
std::
评论
std::shared_ptr
std::shared_ptr<char[]
shared_ptr<char[]
using std::shared_ptr;
std::