0

我查看了这个出色的答案,但不知道如何将其应用于此剪辑:

//this is in the .hpp file
std::atomic<int> size = 10;
std::recursive_mutex *locks[2];

//in some function of the class
//it's important that the 2nd array dimension is dynamic
the_lock[0] = new std::recursive_mutex[size]; 
the_lock[1] = new std::recursive_mutex[size];
std::recursive_mutex (*locks_2)[2][size] = &locks;

任务给了我

error: cannot convert ‘std::recursive_mutex* (*)[2]’ to ‘std::recursive_mutex (*)
[2][(((sizetype)(((ssizetype)((**here be long type information, since I'm using
templates a lot**, long unsigned int, std::less<long unsigned int>          
>::size.std::atomic<long unsigned 
int>::<anonymous>.std::__atomic_base<_IntTp>::operator 
std::__atomic_base<_IntTp>::__int_type<long unsigned int>()) + -1)) + 1)]’ in 
initialization

如何获得指向“锁”的指针?

4

3 回答 3

3

错误消息实际上是免费赠送解决方案:

std::recursive_mutex * (*locks_2)[2] = &locks;
于 2013-07-03T22:12:16.867 回答
2

人们可以利用这样一个事实,即此类事情已被正式宣布为非常难以正确解决,而编译器无法为您解决没有明显的原因。如果您的编译器支持 C++ 2011,那就是。利用:

auto my_ptr = &locks; // point to locks, let the compiler worry about types

不过,要求您将代码编译为 C++ 2011。(-std=c++11对于 GCC)。

于 2013-07-03T22:18:34.620 回答
1

locks只是一个指针数组。因此,您可以使用指针指针指向它。

std::recursive_mutex **locks_2 = locks;
于 2013-07-03T22:12:00.560 回答