多线程并获取错误调用函数

时间:2014-08-07 07:56:19

标签: c++ multithreading visual-c++ file-io

使用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

不确定最新情况......需要帮助谢谢;会喜欢的!

2 个答案:

答案 0 :(得分:2)

这可能是VS中的一个缺陷,因为reference wrapper应仅返回.get()上的引用或通过operator T&隐式转换,因此不应触发此错误。请注意,您的问题在g ++ 4.8.2中无法重现。但是,如果删除引用包装器,则应该没问题。

无论哪种方式,cv::imwrite都需要const std::string&,而不是char (&)[136]。无论如何,与std::string合作更好,所以现在是调查它们的好时机。

答案 1 :(得分:1)

C2090Compiler 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表示字符串。