我有一个无法移动或复制的类型(通过使必要的构造函数和运算符变为私有)。但是,当我试图编译它们的std :: list时,操作失败,出现了一个非常奇怪的错误(为简洁起见,缩减了类名称)。std :: list的类型要求
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmemory(202)
: error C2248: 'T::T' : cannot access private member declared in class 'T'
当然,链接列表中的类型并非是可移动或可复制的。
当这些成员被公开时,代码会很好地编译 - 即使std :: list试图访问它们,它也是一个无法解析的外部函数,因为它们只是被声明为private。是没有意义的:(
“当然,它不是一个链接列表中的类型是任意可移动或可复制的。”那么它应该如何从列表外部获得值到内部该列表?:) – GManNickG 2010-06-19 20:53:29
通过使用调整大小和默认构建它们。为什么没有明确的功能来添加默认构建的函数,我不知道。 – Puppy 2010-06-19 20:54:58
因为,由于容器需求明确指出对象必须是可复制构建的,所以没有太多理由去打扰它。 – 2010-06-19 22:12:46