2011-07-06 22 views
1

は、だから私は、要素が構造体のポインタとint型のペアでベクトルを作ってみました、と私は、これは不可能であり得ることを考え始めています。..ベクトル<pair <aStruct *、int>>は不可能ですか?

は、私は、次の構造体があるとします。

struct node{ 
    string str; 
    int size; 
    node *child[3]; 
    node(string str1):str(str1){ size = 0;} 
}; 

とベクトル:

vector< pair<node*,int> > nodvector; 

それから私は、新しいノードを作成し、ベクトルにそれを入れてみました、と明らかにそれが働いていない:

int main(){ 
    node* nod1 = new node("HELLO"); 
    node* nod2 = new node("WORLD"); 
    nodevector.push_back(pair<nod1,3>); 
    delete nod1; 
    delete nod2; 
} 

コンパイラが言って私に吠え: NOD1は定数式には表示されませんすることができ エラー:テンプレート引数1無効 エラーです:テンプレート構造体のstdテンプレートパラメータリスト内の引数2の種類/値の不一致::ペア

は、

これはまったく不可能ですか? これに代わる方法は何ですか? あなたのご意見は非常に高く評価されます!

+0

C++のチュートリアルを読んでください。 –

+0

裸のポインタをコンテナに保管しないようにしてください。このように正しいメモリ管理を行うのは難しいです。 – kennytm

+0

ベクトルを追加するためにペアを作成するときは、このペアのようなテンプレート引数を返すべきです。(nod1,3) 通常、あなたはそれのtypedefを行います – gastush

答えて

3

nodevector.push_back(ペア<ノード*、int>(nod1,3));

+0

ああ、私はとても馬鹿だと感じています。私は寝不足だと思う。 – Mang

8

新しいペアを作成する場合は、代わりにmake_pairを使用してください。

だから、この作品:nodevector.push_back(make_pair(nod1, 3));

1

問題は、あなたがペアにテンプレートパラメータとしてnod13を使用しています:

代わり
nodevector.push_back(pair<nod1,3>); 

、試してみてください。

nodevector.push_back(pair<node, int>(nod1,3)); 

またはそれ以上まだ:

nodevector.push_back(make_pair(nod1,3)); 
0

ペアのオブジェクトを作成します。あなたはまだそれを作成していません。

"ペア"は正しい構文ですか?

修正してください。

0

このようなことを試してみてください。あなたは、発生予定クラスが操作されるテンプレート引数を混乱させるでしょう。

vector< pair<node*,int> > nodvector; 

ノード* nod1 =新しいノード( "HELLO"); ノード* nod2 =新しいノード( "WORLD"); nodvector.push_back(pair(nod1,4)); 削除nod1; 削除nod2; }

1

上記の回答はすべて正しいです。

あなたのコードは、「型」をベクトルにプッシュしようとしています。それはコンパイラが怒っている理由です:)。

はあなたが助け

v.push_back(i); 

希望をしたい、明らかに

int i = 10; 
vector<int> v; 
v.push_back(int); 

ようなものをやっています。

関連する問題