【问题标题】:Vector error , cannot get push_back to work矢量错误,无法让 push_back 工作
【发布时间】:2011-11-21 18:26:38
【问题描述】:

这只是未注释代码的 sn-p。打包向量在push_back() 处不断导致错误,我不太清楚为什么:

编辑:已更新为

vector<BinTreeNode<HuffmanToken<Pixel>* > > packing = new vector<BinTreeNode<HuffmanToken<Pixel> > >();

但是,即使使用调整后的模板,仍然存在分配器错误。

没有匹配的函数调用 std::vector , std::allocator > > :: push_back(BinTreeNode > >&

BinTree<HuffmanToken<Pixel> >* Huffman::buildTree(const vector<HuffmanToken<Pixel>>& tokens) {

BinTreeNode<HuffmanToken<Pixel> >* g1 = new BinTreeNode<HuffmanToken<Pixel> >();
BinTreeNode<HuffmanToken<Pixel> >* g2 = new BinTreeNode<HuffmanToken<Pixel> >();
BinTreeNode<HuffmanToken<Pixel> >* g3 = new BinTreeNode<HuffmanToken<Pixel> >();

vector<HuffmanToken<Pixel> > packing ;

vector<HuffmanToken<Pixel> >::const_iterator it;

it = tokens.begin();

for(int i = 0; i < tokens.size(); i++) {
  g1 -> setValue(tokens.at(i));
  packing.push_back(g1);
}

【问题讨论】:

    标签: c++ stl vector push-back


    【解决方案1】:

    您的向量需要 HuffmanToken&lt;Pixel&gt; 对象,但您正在尝试 push_back BinTreeNode&lt;HuffmanToken&lt;Pixel&gt; &gt;* 指针。只需确保您的向量具有正确的模板类型即可。

    编辑

    考虑到您的更新,我决定按原样扔掉所有代码:

    BinTree<HuffmanToken<Pixel> >* Huffman::buildTree(const vector<HuffmanToken<Pixel>>& tokens) {
    
        BinTreeNode<HuffmanToken<Pixel> >* g1 = new BinTreeNode<HuffmanToken<Pixel> >();
        BinTreeNode<HuffmanToken<Pixel> >* g2 = new BinTreeNode<HuffmanToken<Pixel> >();
        BinTreeNode<HuffmanToken<Pixel> >* g3 = new BinTreeNode<HuffmanToken<Pixel> >();
    
        vector<BinTreeNode<HuffmanToken<Pixel> >*> packing ;
    
        vector<BinTreeNode<HuffmanToken<Pixel> >*>::const_iterator it;
    
        it = tokens.begin();
    
        for(int i = 0; i < tokens.size(); i++) {
            g1 -> setValue(tokens.at(i));
            packing.push_back(g1);
        }
    

    与原始代码的唯一区别是 vector&lt;HuffmanToken&lt;Pixel&gt; &gt; 被替换为 vector&lt;BinTreeNode&lt;HuffmanToken&lt;Pixel&gt; &gt;*&gt;(这适用于 vector 本身以及迭代器)。

    【讨论】:

    • 我仍然收到以下错误“在 'packing' 中对成员 'push_back' 的请求,它属于非类类型 'std::vector> >, std ::allocator > > >*" 对向量进行此更改 vector > >* packing = new vector > ();跨度>
    • 您的向量不需要是指针。它应该只存储指针。如果我正确理解您的代码,您的向量应声明为vector&lt;BinTreeNode&lt;HuffmanToken&lt;Pixel&gt;* &gt; &gt; packing;
    【解决方案2】:

    您的类型不匹配。你有一个HuffmanToken&lt;Pixel&gt;s 的向量,你正试图将一个BinTreeNode&lt;HuffmanToken&lt;Pixel&gt; &gt; * 推到它上面。

    【讨论】:

      【解决方案3】:
      BinTreeNode<HuffmanToken<Pixel> >* g1 = new BinTreeNode<HuffmanToken<Pixel> >();
      

      g1 的类型是BinTreeNode&lt;HuffmanToken&lt;Pixel&gt; &gt;*,即它是一个指针类型。但是packing 的类型是vector&lt;HuffmanToken&lt;Pixel&gt; &gt;。向量包含的是对象,而不是指向对象的指针。

      【讨论】:

      • *g1 仍然不是 HuffmanToken 类型,而是 BinTreeNode > 类型。
      【解决方案4】:

      您的向量是 HuffmanToken&lt;Pixel&gt; 类型,但您正试图将 BinTreeNode<HuffmanToken<Pixel> >* 类型推入其中。

      【讨论】:

        【解决方案5】:

        这里的问题是您正在创建一个应该包含HuffmanToken&lt;Pixel&gt; 类型项目的向量。您尝试将BinTreeNode&lt;HuffmanToken&lt;Pixel&gt; &gt;* 推入,而不是将该类型的项目推入向量中。

        这是行不通的。

        你可能想要推送的是 g1->getValue() 的返回值(如果有这样的方法的话......)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-03
          相关资源
          最近更新 更多