2012-03-24 87 views
0

变量,我想请教一下在C++中的typedef变量的typedef在C++

好了,我现在正在使用PCL,我想代码分离到的.h和.cpp

,这里是我的.h文件

template <typename PointType> 
class OpenNIViewer 
{ 
public: 
    typedef pcl::PointCloud<PointType> Cloud; 
    typedef typename Cloud::ConstPtr CloudConstPtr; 

    ... 
    ... 

    CloudConstPtr getLatestCloud(); 

    ... 
    ... 
}; 

然后getLatestCloud()对其他.cpp文件

template <typename PointType> 
CloudConstPtr OpenNIViewer<PointType>::getLatestCloud() 
{ 
    ... 
} 

然后我得到了C4430的定义错误,因为它不承认返回类型CloudConstPtr

抱歉愚蠢的问题:d

回答

2

CloudConstPtr是嵌套类型,所以你需要使用的范围也限定它:

template <typename PointType> 
typename OpenNIViewer<PointType>::CloudConstPtr OpenNIViewer<PointType>::getLatestCloud() 
{ 
    ... 
} 

但随后它仍然会而不是工作:这是因为你已经在.cpp文件中定义它。在模板的情况下,定义应该在.h文件本身中可用。最简单的方法是在类中定义每个成员函数。不要写.cpp文件。

+1

啊,谢谢你的回答,反正我发现模板类不应该分开来的.h和.cpp 我应该把他们都在一个单一的.h代替:d – 2012-03-24 07:50:43

+0

@RezaAdhityaSaputra:是的。把它们放在单个'.h'文件中 – Nawaz 2012-03-24 07:54:36

1

更改getLatestCloud到:

template <typename PointType> 
typename OpenNIViewer<PointType>::CloudConstPtr 
OpenNIViewer<PointType>::getLatestCloud() 
{ 
    ... 
} 

当读取CloudConstPtr,编译器还不知道它应该寻找其中的范围,因此需要加以限定。