【问题标题】:Using vector iterators with in a template class在模板类中使用向量迭代器
【发布时间】:2012-04-13 05:21:31
【问题描述】:

我正在尝试在我正在创建的模板类中创建向量迭代器。以下是故障码。

void editor<T>::insert()
{   
        typedef typename std::vector<T>::const_iterator itr;
        itr it;
        it = this->buffer.begin();

        for(int i = 0; i < line_num -1; ++i)
        {   
            ++it;
        }

        this->buffer.insert(it, user_text);
        std::cout << "Cool, Your new line has been inserted." << '\n';
    }
    std::cout << '\n';
}

我收到以下编译错误:

error: no match for ‘operator=’ in ‘it = ((editor<std::basic_string<char> >*)this)->editor<std::basic_string<char> >::buffer.std::vector<_Tp, _Alloc>::begin [with _Tp = std::vector<std::basic_string<char>, std::allocator<std::basic_string<char> > >, _Alloc = std::allocator<std::vector<std::basic_string<char>, std::allocator<std::basic_string<char> > > >, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char>, std::allocator<std::basic_string<char> > >*, std::vector<std::vector<std::basic_string<char>, std::allocator<std::basic_string<char> > >, std::allocator<std::vector<std::basic_string<char>, std::allocator<std::basic_string<char> > > > > >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer = std::vector<std::basic_string<char>, std::allocator<std::basic_string<char> > >*]()’ 

我感觉编译器对我上面的typedef 语句感到困惑,但这就是我所看到的声明正确迭代器的方式,但由于某种原因它无法正常工作。有什么想法吗?

【问题讨论】:

  • buffer的定义是什么?
  • @Naveen 缓冲区声明 std::vector&lt; std::vector&lt;T&gt; &gt; buffer; 这是我班级的多维向量。
  • 你能贴出调用这个函数的代码吗?

标签: c++ templates stl iterator


【解决方案1】:

如果bufferstd::vector&lt; std::vector&lt;T&gt; &gt;,那么buffer.begin()std::vector&lt; std::vector&lt;T&gt; &gt;::iteratorconst_iterator,所以你的typedef 不匹配。

【讨论】:

  • 如果T 这里是std::vector&lt;Type&gt; 怎么办?
  • @Naveen:如果你看他的错误信息Tstd::basic_string&lt;char&gt;
  • @Naveen 我假设缓冲区定义中的T 和代码 sn-p 是一回事。否则 buffer 将是 std::vector&lt;std::vector&lt;std::vector&lt;T&gt;&gt;&gt;
  • 你明白了......我怀疑我的typedef 被搞砸了。
猜你喜欢
  • 2016-02-18
  • 1970-01-01
  • 2010-09-30
  • 2017-07-04
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
相关资源
最近更新 更多