template< typename T >
class vector {
public:
typedef T & reference;
typedef T const & const_reference;
typedef size_t size_type;
const_reference at(size_t) const;
reference at(size_t);
在同一個文件
template< typename T >
typename vector<T>::const_reference // Line X
vector<T>::at(size_type i) const
{
rangecheck();
return elems_[ i ];
}
template< typename T >
reference // Line Y
vector<T>::at(size_type i)
{
rangecheck();
return elems_[ i ];
}
線X
,後來一類編譯罰款,但Y線上不能編譯。從G ++(4.4.1版本)的錯誤信息是:
foo.h:Y: error: expected initializer before 'vector'
由此我推測,如果我想有非內聯函數,那我也完全限定的typedef名稱作爲線X(請注意,size_type
沒有問題。)
但是,至少對我而言,Line X看起來笨拙。
有沒有其他方法?
接受的答案是不正確的。 – 2010-05-16 01:07:10