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

あなたのタイプは一致しません。s のベクトルがあり、HuffmanToken<Pixel>それに a をプッシュしようとしてBinTreeNode<HuffmanToken<Pixel> > *います。

于 2011-11-21T18:30:31.143 に答える
1
BinTreeNode<HuffmanToken<Pixel> >* g1 = new BinTreeNode<HuffmanToken<Pixel> >();

の型g1BinTreeNode<HuffmanToken<Pixel> >*つまり、ポインタ型です。しかしpacking、タイプvector<HuffmanToken<Pixel> >です。ベクトルが保持するのはオブジェクトですが、オブジェクトへのポインタではありません。

于 2011-11-21T18:31:56.397 に答える
1

あなたのベクターは型HuffmanToken<Pixel>ですが、型をプッシュしようとし BinTreeNode<HuffmanToken<Pixel> >*ています。

于 2011-11-21T18:32:23.773 に答える
0

ここでの問題は、 type のアイテムを保持することになっている vector を作成していることですHuffmanToken<Pixel>。そのタイプのアイテムをベクトルにプッシュする代わりに、BinTreeNode<HuffmanToken<Pixel> >*.

そして、これは機能しません。

おそらくプッシュしたかったのは、g1->getValue()の戻り値でした(そのようなメソッドがあれば...)。

于 2011-11-21T18:33:36.507 に答える