C++ 多线程和获取错误调用函数

C++ 多线程和获取错误调用函数,c++,multithreading,visual-c++,file-io,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\\Ske

使用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\u RGBDepth\u DataAcquisition2013

不太清楚发生了什么…需要帮助谢谢;我会喜欢的

C2090
是:

您可以在
xrefwrap:432
中点击此按钮。这是由
std::ref(fnameC)
char fnameC[…]的定义引起的。生成的
std::reference_wrapper.Get()
应该返回
char[]
,因此出现错误

另外,使用最大路径作为路径缓冲区。对字符串使用
std::string

C2090
是:

您可以在
xrefwrap:432
中点击此按钮。这是由
std::ref(fnameC)
char fnameC[…]的定义引起的。生成的
std::reference_wrapper.Get()
应该返回
char[]
,因此出现错误

另外,使用最大路径作为路径缓冲区。对字符串使用
std::string

C2090
是:

您可以在
xrefwrap:432
中点击此按钮。这是由
std::ref(fnameC)
char fnameC[…]的定义引起的。生成的
std::reference_wrapper.Get()
应该返回
char[]
,因此出现错误

另外,使用最大路径作为路径缓冲区。对字符串使用
std::string

C2090
是:

您可以在
xrefwrap:432
中点击此按钮。这是由
std::ref(fnameC)
char fnameC[…]的定义引起的。生成的
std::reference_wrapper.Get()
应该返回
char[]
,因此出现错误


另外,使用最大路径作为路径缓冲区。对字符串使用
std::string

这可能是VS中的一个缺陷,因为a应该只返回
.get()
上的引用,或者通过
操作符T&
进行隐式转换,因此不应该触发此错误。请注意,您的问题在g++4.8.2中不可复制。但是,如果删除引用包装器,您应该不会有问题


无论哪种方式,都需要一个
常量std::string&
,而不是
字符(&)[136]
。无论如何,使用
std::string
s是更好的方法,因此这将是研究它们的好时机。

这可能是VS中的一个缺陷,因为a应该只返回
.get()
上的引用或通过
操作符T&
进行隐式转换,因此不应该触发此错误。请注意,您的问题在g++4.8.2中不可复制。但是,如果删除引用包装器,您应该不会有问题


无论哪种方式,都需要一个
常量std::string&
,而不是
字符(&)[136]
。无论如何,使用
std::string
s是更好的方法,因此这将是研究它们的好时机。

这可能是VS中的一个缺陷,因为a应该只返回
.get()
上的引用或通过
操作符T&
进行隐式转换,因此不应该触发此错误。请注意,您的问题在g++4.8.2中不可复制。但是,如果删除引用包装器,您应该不会有问题


无论哪种方式,都需要一个
常量std::string&
,而不是
字符(&)[136]
。无论如何,使用
std::string
s是更好的方法,因此这将是研究它们的好时机。

这可能是VS中的一个缺陷,因为a应该只返回
.get()
上的引用或通过
操作符T&
进行隐式转换,因此不应该触发此错误。请注意,您的问题在g++4.8.2中不可复制。但是,如果删除引用包装器,您应该不会有问题

无论哪种方式,都需要一个
常量std::string&
,而不是
字符(&)[136]
。无论如何,使用
std::string
s更好,所以现在是研究它们的好时机

A function cannot return an array. Return a pointer to an array instead.
The following sample generates C2090:
// C2090.cpp
int func1(void)[] {}   // C2090