所以我有一个结构,它包含许多成员,包括一个到PCLVisualizer对象的boost共享指针。 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");
我的代码编译。我不明白为什么通过结构访问查看器会产生任何影响。
任何帮助表示赞赏
这是一个非常糟糕的简单案例测试......您是否尝试使用'gt_data'作为类型,或者您是否也有一个名为'gt_data'的变量? 'gt_data.output'是如何声明的,是'静态'吗? 'gt_data'是模板还是依赖于模板参数?你应该准备一个简单的最小化测试用例来重现问题并发布... –
@ K-ballo谢谢你指出我的问题。我做了一些改变。我希望这能澄清事情。 – Mustafa
它没有阐明'PointType'来自哪里,也不是'foo'依赖于它......(因为我的答案解决了你的问题,我可以猜出来,但我不应该猜测你的问题是什么) –