我有這樣定義的類:類模板函數簽名語法
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