gpt4 book ai didi

c++ - Concurrency::critical_section 构建错误:无法访问私有(private)成员

转载 作者:行者123 更新时间:2023-11-28 02:42:46 24 4
gpt4 key购买 nike

我无法构建以下代码 (vs2013) block 并收到错误 “error C2248: 'Concurrency::critical_section::critical_section' : cannot access private member declared in class 'Concurrency::critical_section'”

任何人都可以帮助解释为什么会这样?谢谢

#include <ppl.h>

class Class1{

public:

concurrency::critical_section _cs;
int f1;
Class1(int f){ f1 = f; }
};

class Class2{

public:
std::vector<Class1> v1;
Class2(){ v1.push_back(Class1(1)); v1.push_back(Class1(2)); }
};

int _tmain(int argc, _TCHAR* argv[])
{
Class2 c2();

return 0;
}

最佳答案

concurrency::critical_section 既不可复制也不可移动(这是通过将其复制构造函数设为 private 的老式方法完成的,因此会出现错误)。因此,写入的 Class1 也无法复制或移动,您也无法将其push_back 到 vector 中。

要解决此问题,您可以编写自己的复制构造函数和复制赋值运算符,它们仅复制 f1:

class Class1
{
public:
concurrency::critical_section _cs;
int f1;
Class1(int f) : f1(f) { }
Class1(const Class1 &other) : f1(other.f1) { }
Class1 & operator=(const Class1 &other) {
// synchronization omitted
f1 = other.f1;
}
};

旁注:Class2 c2(); 声明了一个返回 Class2 的函数,而不是一个值初始化的对象。

旁注 2:VS 的“错误列表”中的错误消息通常不完整。您需要检查构建输出以获得完整的错误日志。在这种情况下,我的 VS2013 上的完整错误日志是:

ConsoleApplication2.cpp(15): error C2248: 'Concurrency::critical_section::critical_section' : cannot access private member declared in class 'Concurrency::critical_section'
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\concrt.h(3712) : see declaration of 'Concurrency::critical_section::critical_section'
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\concrt.h(3549) : see declaration of 'Concurrency::critical_section'
This diagnostic occurred in the compiler generated function 'Class1::Class1(const Class1 &)'

关于c++ - Concurrency::critical_section 构建错误:无法访问私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25422346/

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