1

そこで、struct ポインタと 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で型/値が一致しません

これはただ不可能なことですか?これに対する代替ソリューションは何でしょうか? ご意見をお待ちしております。

4

7 に答える 7

8

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

したがって、これは機能します:nodevector.push_back(make_pair(nod1, 3));

于 2011-07-06T07:05:23.097 に答える
3

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

于 2011-07-06T07:04:57.707 に答える
1

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

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

あなたは次のようなことをしています

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

明らかに、あなたはしたい

v.push_back(i);

お役に立てば幸いです。

于 2011-07-06T07:14:01.153 に答える
1

問題は、ペアにするテンプレート パラメーターとしてnod1andを使用していることです。3

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

代わりに、次を試してください。

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

またはさらに良い:

nodevector.push_back(make_pair(nod1,3));
于 2011-07-06T07:06:03.410 に答える
0

ペアのオブジェクトを作成します。まだ作成していません。

「ペア」は正しい構文だと思いますか?

修正してください。

于 2011-07-06T07:07:25.007 に答える
0

このようなことを試してみてください。操作対象の発生クラスのテンプレート引数が混乱しています。

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

node* nod1 = 新しいノード ("HELLO"); node* nod2 = new node("WORLD"); nodvector.push_back(ペア(nod1,4)); nod1を削除します。nod2 を削除します。}

于 2011-07-06T07:09:50.470 に答える