4

这只是未注释代码的片段。打包向量不断导致错误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);
}
4

5 回答 5

7

您的向量期待HuffmanToken<Pixel>对象,但您正在尝试指向指针。只需确保您的矢量具有正确的模板类型。push_backBinTreeNode<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自身以及迭代器)。

于 2011-11-21T18:30:21.983 回答
1
BinTreeNode<HuffmanToken<Pixel> >* g1 = new BinTreeNode<HuffmanToken<Pixel> >();

的类型g1BinTreeNode<HuffmanToken<Pixel> >*ie,它是一个指针类型。但packing属于类型vector<HuffmanToken<Pixel> >。向量包含的是对象,而不是指向对象的指针。

于 2011-11-21T18:31:56.397 回答
1

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

于 2011-11-21T18:32:23.773 回答
1

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

于 2011-11-21T18:30:31.143 回答
0

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

这是行不通的。

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

于 2011-11-21T18:33:36.507 回答