使用Microsoft Kinect VS 2013将代码编写到多线程。
char fnameC[sizeof "C:\\Users\\Adam\\Desktop\\Skeleton_RGBDepth_DataAcquisition2013\\Skeleton_RGBDepth_DataAcquisition2013\\Color_Image\\Color_01_c1_00_00_000.png"];
char fnameD[sizeof "C:\\Users\\Adam\\Desktop\\Skeleton_RGBDepth_DataAcquisition2013\\Skeleton_RGBDepth_DataAcquisition2013\\Depth_Image\\Depth_01_c1_00_00_000.png"];
int main() {
set up stuff....
while(1) {
setup of the color image frame and depth image frame...
std::thread im01(cv::imwrite, std::ref(fnameC), std::ref(colorImage));
std::thread im02(cv::imwrite, std::ref(fnameD), std::ref(depthImage));
im01.join();
im02.join();
}
}
我收到错误:
错误1错误C2090:函数返回数组c:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xrefwrap 432 1 Skeleton_RGBDepth_DataAcquisition2013
不确定最新情况......需要帮助谢谢;会喜欢的!
答案 0 :(得分:2)
这可能是VS中的一个缺陷,因为reference wrapper应仅返回.get()
上的引用或通过operator T&
隐式转换,因此不应触发此错误。请注意,您的问题在g ++ 4.8.2中无法重现。但是,如果删除引用包装器,则应该没问题。
无论哪种方式,cv::imwrite
都需要const std::string&
,而不是char (&)[136]
。无论如何,与std::string
合作更好,所以现在是调查它们的好时机。
答案 1 :(得分:1)
C2090
是Compiler Error C2090:
A function cannot return an array. Return a pointer to an array instead.
The following sample generates C2090:
// C2090.cpp
int func1(void)[] {} // C2090
您在xrefwrap:432
中点击此处。这是由std::ref(fnameC)
和char fnameC[...]
的定义引起的。结果std::reference_wrapper<char[]>.Get()
应该返回char[]
,因此错误。
PS。使用MAX_PATH作为路径缓冲区。使用std::string
表示字符串。