gpt4 book ai didi

c++ - 错误 C2248 : 'X::operator =' : cannot access private member declared in class 'X'

转载 作者:行者123 更新时间:2023-11-30 04:02:04 40 4
gpt4 key购买 nike

stackoverflow 上已经有人问过类似的问题。我确实看过它们,但仍然无法解决我面临的问题

我有一个结构X,其中包含一些成员变量,包括一个mutex。当从多个线程向其中推送元素时,我正在使用此互斥锁来锁定对名为 vecIds 的成员 vector 的访问。

此外,由于我不希望类型为 X 的对象是可复制的或可复制构造的,因此我将复制构造函数和复制赋值运算符函数声明为私有(private)

struct X
{
bool a;
unsigned value;
std::vector<unsigned> vecIds;
std::mutex mutex;

X(): a(false), value(0), mutex(){}

private:
X( X const &x);
X& operator=( Xconst &x);
};

在我的代码中的某处,我正在创建 100 个 X 类型对象的 vector 。当我编译我的代码时,我看到以下错误:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xutility(2466): error C2248: 'X::operator =' : cannot access private member declared in class 'X'
X.h(12): see declaration of 'X::operator ='
X.h(2): see declaration of 'X'

我好像没弄清楚问题出在哪里

最佳答案

这是 VS2013 中修复的 VS2012 错误。 VS2012的实现

explicit vector(size_type n);

电话 resize() ,这要求元素同时是 DefaultInsertableMoveInsertable .这是不合格的,因为构造函数本身只需要 DefaultInsertable *。 (更糟糕的是,它的 resize() 实现调用了 erase() ,这要求类型为 MoveAssignable ...)

它在 this MSDN blog post 中提到(搜索“vector<DefaultConstructible>(10) ”)。

如果您使用固定长度的容器,请考虑使用 std::array<X, 100> .


*当使用默认分配器时,*Insertable要求基本上转化为*Constructible .

关于c++ - 错误 C2248 : 'X::operator =' : cannot access private member declared in class 'X' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25422622/

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