类内使用using std::shared_ptr报错:std::并非类,无法引用
问题解答
你遇到的编译错误是因为类/结构体作用域内的using声明不能直接引用命名空间(比如std)中的成员。类里的using语法原本是为继承场景设计的——用来引入基类的成员,让子类可以直接访问,而std是命名空间不是类,所以编译器会报错。
不用被迫全程写std::shared_ptr,有两种更优雅的解决方式:
在类内部定义类型别名(推荐):
用using在类里给std::shared_ptr起个短别名,既不污染全局命名空间,又能简化类内代码:struct Data { using shared_ptr = std::shared_ptr; shared_ptr<char[]> m_name = nullptr; };在文件级(而非类内)引入
std::shared_ptr:
如果整个源文件都频繁用到shared_ptr,可以在文件开头(类定义之前)写using std::shared_ptr;,这样整个文件里都能直接用shared_ptr。但注意如果是头文件,别这么做——会把这个引入传递给所有包含该头文件的代码,容易引发命名冲突。
当然,如果类里只有一两个用到std::shared_ptr的地方,直接写全限定名std::shared_ptr<char[]> m_name = nullptr;也很清晰,没必要额外加别名。
内容的提问来源于stack exchange,提问作者KcFnMi
相关产品推荐
相关产品推荐

