矢量错误,无法让push_back工作

时间:2011-11-21 18:26:38

标签: c++ stl vector push-back

这只是未注释代码的一小部分。打包向量一直导致push_back()出错,我不太清楚为什么:

编辑:已更新为

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

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

  

没有匹配函数来调用std :: vector,std :: allocator&gt; &GT; :: push_back(BinTreeNode&gt;&gt;&amp;

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);
}

5 个答案:

答案 0 :(得分:5)

您的向量需要HuffmanToken<Pixel>个对象,但您正在尝试push_back BinTreeNode<HuffmanToken<Pixel> >*指针。只需确保您的矢量具有正确的模板类型。

修改

考虑到您的更新,我决定抛弃所有代码:

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<HuffmanToken<Pixel> >被替换为vector<BinTreeNode<HuffmanToken<Pixel> >*>(适用于vector本身以及迭代器。)

答案 1 :(得分:1)

您的矢量属于HuffmanToken<Pixel>类型,但您正尝试将类型 BinTreeNode<HuffmanToken<Pixel> >*推入其中。

答案 2 :(得分:0)

您的类型不匹配。您有一个HuffmanToken<Pixel>的向量,并且您正试图将BinTreeNode<HuffmanToken<Pixel> > *推到其上。

答案 3 :(得分:0)

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

g1的类型是BinTreeNode<HuffmanToken<Pixel> >*,即它是指针类型。但packing的类型为vector<HuffmanToken<Pixel> >。向量包含的是对象,但不是指向对象的指针。

答案 4 :(得分:0)

这里的问题是你正在创建一个应该保存HuffmanToken<Pixel>类型项的向量。您尝试推入BinTreeNode<HuffmanToken<Pixel> >*,而不是将该类型的项目推送到向量中。

这不起作用。

您可能希望推送的是 g1-&gt; getValue()的返回值(如果有这样的方法......)。