前提・実現したいこと
std::vector<bool> を使ってコードを書いているのですが、no matching function となってしまいうまく行きません。
std::vector<bool> は使うべきではないと聞いたので std::vector<char> にしたり、単純に bool などにしましたがだめでした。
他に試すべきことがあればご教授いただきたいです。
発生している問題・エラーメッセージ
Eigen::Matrix3d minimizeTransform 内 ceres::CostFunction* cost = new ceres::AutoDiffCostFunction<CostFunc, 1, 9> (new CostFunc(source->at(i), target->at(closest[i]), weight[i])); 上記の一番最後のweight[i]に次のエラー no matching function for call to ‘CostFunc::CostFunc(pcl::PointXYZ&, pcl::PointXYZ&, std::vector<bool>::reference)’
該当のソースコード
C++
1struct CostFunc 2{ 3 CostFunc(const pcl::PointNormal source, const pcl::PointNormal target, const bool w) 4 : source_(source), target_(target), w_(w) {} 5 6 template <typename T> 7 bool operator()(const T *const p, T *residual, const bool w) 8 { 9 T x = T(source_.x); 10 T y = T(source_.y); 11 T z = T(source_.z); 12 13 pcl::PointXYZ Tb; 14 Tb.x = p[0]*x+p[1]*y+p[2]*z+p[3]; 15 Tb.y = p[4]*x+p[5]*y+p[6]*z+p[7]; 16 Tb.z = p[8]*x+p[9]*y+p[10]*z+p[11]; 17 18 residual[0] = T(w?1:0)*T(sqrt(pow( (target_.x - Tb.x)*(target_.x - Tb.x) + (target_.y - Tb.y) * (target_.y - Tb.y) + (target_.z - Tb.z) * (target_.z - Tb.z), 0.5 ))); 19 return true; 20 } 21 22 private: 23 pcl::PointNormal source_; 24 pcl::PointNormal target_; 25 double w_; 26}; 27std::vector<bool> &weight → bool weight 28Eigen::Matrix3d minimizeTransform( 29 pcl::PointCloud<pcl::PointXYZ>::Ptr source, 30 pcl::PointCloud<pcl::PointXYZ>::Ptr target, 31 std::vector<int> &closest, 32 std::vector<bool> &weight) 33{ 34 Eigen::Matrix3d matrix; 35 ceres::Problem problem; 36 std::vector<double> param(9, INITIAL_SURFACE_PARAMETER); 37 for (int i = 0; i < target->size(); ++i) 38 { 39 ceres::CostFunction* cost = 40 new ceres::AutoDiffCostFunction<CostFunc, 1, 9>(new CostFunc( 41 source->at(i), 42 target->at(closest[i]), 43 weight[i])); 44 problem.AddResidualBlock(cost, NULL, param.data()); 45 }
補足情報(FW/ツールのバージョンなど)
C++
Ceres Solver
Eigen
Point Cloud Library
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/01 00:18
2019/10/01 04:16
2019/10/01 08:00
2019/10/03 08:36