我有这样定义的类:类模板函数签名语法
template< class TBoundingBox >
class BoundingBoxPlaneCalculator
{
typedef PlaneSpatialObject<TBoundingBox::PointDimension> PlaneSpatialObjectType;
typedef typename PlaneSpatialObjectType::Pointer PlaneSpatialObjectPointer;
std::vector<PlaneSpatialObjectPointer> GetPlanes() const{}
}
如果我所说的功能,如:
std::vector<PlaneCalculatorType::PlaneSpatialObjectPointer> planes = planeCalculator->GetPlanes();
它工作正常。但是,如果我改变delcaration简单
std::vector<PlaneSpatialObjectPointer> GetPlanes() const;
,然后尝试定义页眉外的功能:
template< class TBoundingBox >
std::vector<BoundingBoxPlaneCalculator<TBoundingBox>::PlaneSpatialObjectPointer>
BoundingBoxPlaneCalculator<TBoundingBox>::GetPlanes() const
{
}
我得到
itkBoundingBoxPlaneCalculator.txx:61:82: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::vector’
itkBoundingBoxPlaneCalculator.txx:61:82: error: expected a type, got ‘itk::BoundingBoxPlaneCalculator<TBoundingBox>::PlaneSpatialObjectPointer’
我也尝试添加类型名称,但没有变化:
template< class TBoundingBox >
std::vector<typename BoundingBoxPlaneCalculator<TBoundingBox>::PlaneSpatialObjectPointer>
BoundingBoxPlaneCalculator<TBoundingBox>::GetPlanes() const
任何人都可以看到这个语法有什么问题吗?
感谢,
大卫
在这里发帖以减少问题至少是个好主意 - 特别是不要使用很长的名字,尽管它们可能在您的实际应用程序代码中。 – 2011-04-25 18:32:04
什么是'TBoundingBox :: PointDimension'?一种?一个整数?如果它是一种类型,我一直想知道为什么在这之前你不需要'typename' ......并且你在使用什么编译器? – Xeo 2011-04-25 18:37:49