我有一个班级模板:
template <class T>
class NormalEstimator
{
public:
NormalEstimator(pcl::PointCloud<T>::Ptr cloud) : _cloud(cloud) {}
void computeNormals();
pcl::PointCloud<pcl::Normal>::Ptr getNormals();
private:
typename pcl::PointCloud<T>::Ptr _cloud;
pcl::PointCloud<pcl::Normal>::Ptr _normals;
int _kNeighbours;
};
成员函数也在头文件中声明。编译时,这给了我错误:
.../normal_estimator.h:12: error: expected ')' before 'cloud'
我忘记了什么吗?我是否需要以某种方式或形式在构造函数上指定'typename'?
答案 0 :(得分:1)
这是一个从属名称。类型::Ptr
依赖于T.所以你必须使用“typename”告诉编译器::Ptr
的值是一个类型。
NormalEstimator(typename pcl::PointCloud<T>::Ptr cloud)
这是因为只要定义了T,:: Ptr的类型可能是任何东西(静态成员/类型/静态函数)。
答案 1 :(得分:0)
你试过这个吗?
NormalEstimator(typename pcl::PointCloud<T>::Ptr cloud) : _cloud(cloud) {}
答案 2 :(得分:0)
是的,构造函数参数中也需要typename
因为T
是一个依赖类型:
NormalEstimator(typename pcl::PointCloud<T>::Ptr cloud)
// ^^^^^^^^