[英]How do you return a vector iterator from a variable in a templated class?
我正在嘗試為模板化類中的向量返回迭代器(我不確定這是否有區別,但是我已經讀過了,所以我以為提到了)。 問題是,當我嘗試此操作時,出現關於C ++不支持default-int的錯誤。 我已經看過網上了,從論壇和解釋中可以看到,我認為我沒有那么遙遠,只是無法編譯。
template<class T>
class Table
{
public:
...
vector<shared_ptr<vector<T>>>::iterator GetRowIterator();
//vector<shared_ptr<vector<CellValueType> > >::const_iterator GetRowIterator();
...
protected:
vector<shared_ptr<vector<CellValueType> > > data; //outside vector is rows, inside vector is columns
...
};
vector<shared_ptr<vector<T> > >::const_iterator Table<T>::GetRowIterator()
{
return data.begin();
}
我得到的錯誤是:
error C2146: syntax error : missing ';' before identifier 'GetRowIterator'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
編輯:
更改了端角括號,使它們之間的距離不太近-相同的錯誤。
有什么想法為什么會這樣呢?
一如既往,感謝您的建議/幫助!
另外,在聲明依賴模板的返回類型時,請記住使用typename:
typename vector< shared_ptr< vector< T > > >::iterator GetRowIterator();
和方法定義
typename vector< shared_ptr< vector< T > > >::const_iterator Table<T>::GetRowIterator()
{
return data.begin();
}
還要注意,在類定義之外定義模板類方法時,必須使用template關鍵字:
template <class T> typename vector< shared_ptr< vector< T > > >::const_iterator Table<T>::GetRowIterator()
{
return data.begin();
}
使編譯器可以知道T的含義。
這部分在這里:
vector<shared_ptr<vector<T>>>
C ++語法存在問題,您不能像這樣將>>放在一起。
vector<shared_ptr<vector<T> > >
新標准正在解決此問題。
由於詞法分析器是編譯器的第一階段,因此它將>>>視為左移運算符,后跟>。 因此,您在代碼中遇到語法錯誤。 要解決此問題,您只需要在關閉模板時在>之間添加空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.