したがって、PCLVisualizer オブジェクトへのブースト共有ポインターを含む多くのメンバーを保持する構造があります。PCLVisualizer クラスは、メンバ関数 updatePointcloud を持つテンプレート化されたクラスです。テンプレート PointType の updatePointCloud を呼び出そうとしています。以下のコードを参照してください。
template <typename PointType>
class A {
struct gt_data_type {
model_struct line;
PointCloudTPtr input;
PointCloudTPtr output;
int step_size;
int segment_min_pts;
vector<float> directions;
float current_direction;
vector<line_segment> seeds;
Eigen::Vector4f prev_vector;
Eigen::Vector4f current_vector;
Eigen::Vector4f p;
typename pcl::search::KdTree<PointType>::Ptr tree;
pcl::visualization::PCLVisualizer::Ptr viewer;
line_segment prev_segment;
};
gt_data_type gt_data;
void foo(PointCloudTPtr output) {
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("Track Viewer"));
gt_data.output = output;
gt_data.viewer = viewer;
// next line causes compile error
gt_data.viewer->updatePointCloud<PointType>(gt_data.output,"rail");
}
}
PointCloudTPtr は、異なる shared_ptr の単なる typedef であることに注意してください。示された行で次のエラーが表示されます。
expected primary-expression before '>' token
構造体を省略し、これを行うことでビューアー メンバー関数を直接呼び出す場合:
viewer->updatePointCloud<PointType>(gt_data.output,"rail");
私のコードはコンパイルされます。構造体を介してビューアにアクセスすると違いが生じる理由がわかりません。
どんな助けでも大歓迎です