具有显式定义的默认构造函数的 unique_ptr 到 nullptr 错误的类内成员初始值设定项
In-class member initializer of unique_ptr to nullptr error with explicitly defined default constructor
>我有一个类模板,它使用类内成员初始值设定项将unique_ptr分配给 nullptr。如果我使用MyClass(){}
,一切都很好。如果我使用 MyClass() = default
,我会得到:
conversion from 'std::nullptr_t' to non-scalar type 'std::unique_ptr<A>' requested
下面是一个无法使用 g++ 4.8.4 编译的最小示例:
#include <memory>
class A{};
template <typename T>
class Test
{
std::unique_ptr<A> data = nullptr;
public:
//Test() {} // works fine
Test() = default; // compiler error
};
int main()
{
Test<float> test;
}
有什么想法吗?
正如评论中已经指出的那样,这是一个编译器错误。这不是unique_ptr
库实现中的问题,而是一个语言问题,没有任何标准的库头,似乎只在类模板中完全可重现:
struct A { A(int); };
struct B { A a = 1; };
B b; // ok
template <typename T> struct C { A a = 1; };
C<void> c; // error
幸运的是,这是一个您可以解决的编译器错误。隐式转换处理不当。强制显式转换,甚至GCC 4.8也接受它。在您的情况下,这意味着:
std::unique_ptr<A> data = std::unique_ptr<A>(nullptr);
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 获取 C2039:"交换":不是成员错误,如何解决?
- 在C 中获取Invalig使用非静态数据成员错误
- 非静态数据成员错误的使用无效
- 是非静态数据成员错误的CPPReference定义
- C++ 使用 & 从数组中的对象创建指针成员 [错误]
- C++,类:成员错误的行外声明
- 打印矢量成员.错误
- 可视化解决VS 2003中指向成员错误的c++指针
- 使用 '&' 创建指向成员错误的指针
- 无法访问在类"QReadWriteLock"中声明的私有成员错误 1 错误 C2248:'QReadWriteLock::QReadWriteLock'
- 如何修复MacOSX上全局命名空间中缺少时间相关的无成员错误
- 我的错误,还是英特尔编译器的错误?非静态成员错误的大小
- 链表访问私有成员错误C2248
- 模板友元函数 C++ 中无效使用非静态数据成员错误
- 使用 '&' 创建指向成员错误的指针
- c++友元函数不能访问私有成员;错误2248
- c++中的静态成员错误
- 类模板的静态成员错误
- 修改 int 类型的结构的成员错误:从 'int' 到 'const char*' [-fallowive] 的