簡體   English   中英

如何從模板化類中的變量返回向量迭代器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM