2016-10-17 2 views
0

tuple, pcl :: visualization :: PointCloudColorHandler>의 튜플을 만들려고합니다. 그러나 대응하는 타입의 인자를 std ::로 전달할 때 make_tuple은 pcl :: PointCloud로 전달 된 인수가 실제로 pcl :: PointCloud 인 것을 말합니다. & & 올바른 값은 rvalue reference입니다. pcl :: PointCloud 유형이 rvalue 참조가되는 방식을 이해하지 못합니다.make_tuple은 템플릿 인자로 T를 기대할 때 T &&로 타입 T를 전달합니다.

pcl::PointCloud<pcl::PointXYZRGB> cloud; 
pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr constCloud(&cloud); 
pcl::io::loadPCDFile<pcl::PointXYZRGB>(file.getPCDFilePath().string(), cloud); 
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgbHandler(constCloud); 
associatedClouds.insert(std::make_tuple<std::string, pcl::PointCloud<pcl::PointXYZRGB>, pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> >(file.getPCDFileName(), cloud, rgbHandler)); 
visualizedFiles.push_back(cloud); 

내가 오류는 다음과 같습니다 :

/Users/wfehrnstrom/CmakeTest/map.cpp:53:29: error: no matching function for call to 'make_tuple' 
    associatedClouds.insert(std::make_tuple<std::string, pcl::PointCloud<pcl::PointXYZRGB>, pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> >(file.getPCDFileName(), cloud, rgbHandler)); 
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:868:1: note: candidate function [with _Tp = <std::__1::basic_string<char>, pcl::PointCloud<pcl::PointXYZRGB>, pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB>>] not viable: no known conversion from 'pcl::PointCloud<pcl::PointXYZRGB>' to 'pcl::PointCloud<pcl::PointXYZRGB> &&' for 2nd argument 
make_tuple(_Tp&&... __t) 

나는 꽤 잃었어요 여기에 코드입니다. 고맙습니다.

+0

''make_tuple'에서'<>'를 제거하고, 단지''std :: make_tuple (file.getPCDFileName(), cloud, rgbHandler);''템플릿 인수 공제가 그 일을하도록하십시오. – 101010

+1

질문의 형식을 지정하십시오. 개가 그것의 절반을 먹은 것처럼 보입니다. 삽입 코드 조각은 다음과 같이 backticks 사이에 나옵니다 :'\'foo \''. –

답변

2

절대 명시 적 템플릿 인수와 함께 make_tuple을 사용하지 마십시오.

Microsoft STL 관리자가 기억하는 견적입니다. 이유는 make_tuple이 여분의 참조를 제거하고 명시 적으로 템플릿 인수를 명시하는 것이 현명하므로 목적을 이길 수 있습니다.

다른 것은 file.getPCDFileName()Rvalue Reference, 입니다. 함수에서 반환되는 임시 값은 rvalue입니다. 지역 변수 auto filename = file.getPCDFileName()을 사용하고 make_tuple(file_name, ...을 사용할 수 있습니다.

관련 문제