C++ 模版编程

关键词 typename

下面是 Array2D<T> 类模版的下标操作符函数定义:

// 下标操作符函数
template <typename T>
Array2D
<T>::RowArray Array2D<T>::operator[](int row) { // error
  
if ( row < 0 || row >= rows_ ) { 
    
throw out_of_range("Array2D<T>: invalid row!"); 
  }
  
  
return RowArray(*this, row); 
}

 在编译程序时该函数定义所在行会产生下面的错误:

array2d.h:96: error: expected constructor, destructor, or type conversion before "Array2D"

这个错误的产生原因是编译器无法知道 RowArray 是 Array2D<T> 的内嵌类,而被误认为是一个 static 成员,解决办法就是在 Array2D<T>::RowArray 前面加上 typename 关键词,显示告诉编译器 Array2D<T>::RowArray 是一个类型。

 

 

 

 

posted @ 2011-04-25 16:28  edwardlost  阅读(424)  评论(0编辑  收藏  举报