【问题标题】:STL iterator with custom template带有自定义模板的 STL 迭代器
【发布时间】:2010-10-10 07:41:05
【问题描述】:

我有以下模板方法,

template <class T>
void Class::setData( vector<T> data )
{    
    vector<T>::iterator it;
}

我收到以下编译错误 (XCode/gcc)

错误:预期为 `;'在“它”之前

我发现其他人遇到了类似的问题here (read down to see it's the same even though it starts out with a different issue),但他们似乎已经通过更新 Visual Studio 解决了。这让我猜测这是一个编译器问题,它应该编译,对吗?通过从 0 到 size 的索引进行迭代是可行的,但这不是我希望实现此功能的方式。还有其他方法吗? 谢谢

【问题讨论】:

  • 注意:考虑传入“vector &data”,或者可能是“vector const &data”而不是“vector data”。前两者将传入对向量的引用,后者将制作向量的完整副本。
  • 当然,这只是一个例子:)

标签: c++ xcode gcc stl


【解决方案1】:

何时使用typename 关键字的经典案例。希望你有#include-ed vectoriterator 并且在范围内的某个地方有一个using namespace std;。使用:

typename vector<T>::iterator it;

查找从属名称。开始here

【讨论】:

    【解决方案2】:

    我认为您缺少typename

    #include <vector>
    using namespace std;
    
    class Class{
    public:
        template <class T>
        void setData( vector<T> data ) {
            typename vector<T>::iterator it;
        }
    };
    

    【讨论】:

      【解决方案3】:

      试试:

      template <class T>
      void Class::setData( std::vector<T> data )
      {    
          std::vector<T>::iterator it;
      }
      

      只是缺少using 语句吗?

      【讨论】:

      • 如果他错过了 using 语句,他也会在函数签名上得到一个错误。
      猜你喜欢
      • 2011-02-26
      • 2014-09-10
      • 2014-05-23
      • 2018-07-20
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2011-01-22
      相关资源
      最近更新 更多