我正在尝试为模板化类中的向量返回一个迭代器(我不确定这是否有所不同,但我已经读过了,所以我想我会提到它)。问题是当我尝试这个时,我得到一个关于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
编辑:
更改了结束角括号,使它们不是一样的 - 相同的错误。
有关为什么会发生这种情况的任何想法?
一如既往,感谢您的建议/帮助!
答案 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;之间添加空格。关闭模板时。