矢量错误,无法使push_back工作

Vector error , cannot get push_back to work

本文关键字:push back 工作 错误      更新时间:2023-10-16

这只是未注释代码的一个片段。包装矢量一直在push_back()上引起错误,我不太确定为什么:

编辑:已更新为

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

然而,即使调整了模板,分配器仍然存在错误。

没有匹配的函数来调用std::vector、std::allocater>>::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);
}

您的向量需要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本身以及迭代器(。

您的类型不匹配。你有一个HuffmanToken<Pixel>s的向量,你正试图把一个BinTreeNode<HuffmanToken<Pixel> > *推到它上面。

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

g1的类型是BinTreeNode<HuffmanToken<Pixel> >*,即它是指针类型。而CCD_ 12属于CCD_。向量包含的是对象,而不是指向对象的指针。

您的向量类型为HuffmanToken<Pixel>,但您正试图将类型 BinTreeNode<HuffmanToken<Pixel> >*推入其中。

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

这是行不通的。

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