如何从模板化类中的变量返回向量迭代器?

时间:2009-01-08 19:00:27

标签: c++ vector iterator

我正在尝试为模板化类中的向量返回一个迭代器(我不确定这是否有所不同,但我已经读过了,所以我想我会提到它)。问题是当我尝试这个时,我得到一个关于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   

编辑:
更改了结束角括号,使它们不是一样的 - 相同的错误。

有关为什么会发生这种情况的任何想法? 一如既往,感谢您的建议/帮助!

2 个答案:

答案 0 :(得分:4)

还要记住在声明依赖于模板的返回类型时使用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是什么了。

答案 1 :(得分:3)

这部分:

vector<shared_ptr<vector<T>>>

这是您无法放置的C ++语法问题&gt;&gt;像这一样。

vector<shared_ptr<vector<T> > >

这是新标准正在解决的问题。

因为词法分析器是编译器的第一个阶段,它会看到&gt;&gt;&gt;作为左移操作员后跟&gt;。因此,您的代码中会出现语法错误。要解决这个问题,你只需要在&gt;之间添加空格。关闭模板时。