コードのC ++ 2DベクトルPUSH_BACKエラー
質問
私は私のプログラムを単一のベクトルで扱っていて、2Dベクトルを使用して複数の手を表すことを決定しました(1次元ベクトルVplayerHand1と1次元ベクトルVplayerHand2 Plus ...)。ベクトルを入力する方法を理解することはできません。私はC ++ 11を完全に実装していないVisual Studio C ++ 2010を使用しており、このフォーラムで同様の質問に対する回答として提供されるコードのIDEの解析エラーを報告しています。下の概要では、カードはクラスです。
#include <vector>
std::vector<std::vector<Card>> vPlayerHand;
vPlayerHand.push_back(vShoe.back()); /* fails with parsing error No instance of
overloaded function... */
vPlayerHand[0].push_back(vShoe.back()); /* builds okay then error Debug Assertion
Failed... vector subscript out of range */
.
2Dベクトル(ベクトルのベクトル)でpush_back関数を正しく使用するような何かがありません。最初の参照は行に理解しています。そして私がpush_backで入力すると、最初の行を行う必要があります。
これはより完全なコードです:
行29で編集された...コードが与えられたときに正しく実行されます @RSAHUによって4番目の32Aで再編集され、@RSAHUが正しく実行されます。行29
をコメントアウトしました1 # include <iostream>
2 # include <vector>
3 # include <algorithm>
4 # include <ctime>
5 # include "Card.h" //Defines Card as having Suit, Rank and functions GetSuit() GetRank()
6
7 std::vector<Card> vShoe; //Card Shoe vector holds 1-8 decks
8 std::vector<Card> vDeck; //Deck vector holds 52 cards of Card class
9 std::vector<std::vector<Card>> vPlayerHand; // Player Hands 0-original, 1-split1, n-splitn
10 std::vector<Card> vDealerHand;
11
12 void CreateDeck(); //Populates Deck with 52 Cards
13 void CreateShoe(int); //Populates Show with Decks*n number of Decks
14 void ShuffleShoe(); // uses random_shuffle
15
16 int main() {
17
18 int iDeckCount = 2;
19 const int NumPlayers = 1;
20 srand(time(0));
21
22
23 CreaateDeck();
24 CreateShoe(iDeckCount);
25 ShuffleShoe();
26
27 // Following line gives parsing error
28 // vPlayerHand = std::vector<std::vector<Card>> (5, std::vector<std::vector<Card>>(12));
// added this line and now runs as expected
/* removed this line in favor of line 32a as per @RSahu
29 vPlayerHand.resize(2); // need only initial size for 2 elements
*/
30 for (int i=0; i<=NumPlayers; i++) {
31 // I believe this is where dimension error comes vPlayerHand[0].push_back
32 // I tried vPlayerHand.push_back(vShoe.back()) but get parsing error "No instance of overloaded function.."
// This line added as per R Sahu. compiles and runs correctly
32a vPlayerHand.push_back(std::vector<Card>());
33 vPlayerHand[0].push_back(vShoe.back()); //Top card in Shoe (last card in vector) is dealt to Player
34 vShoe.pop_back(); //Top card in Shoe is removed (destroyed) from vector Shoe
35 vDealerHand.push_back(vShoe.back()); //Top card in Shoe (last card in vector) is dealt to Dealer
36 vShoe.pop_back(); //Top card in Shoe is removed (destroyed) from vector Shoe
37 }
38
39 /* Show Results
40 std::cout << "\n---------------------------------\n" ;
41 std::cout << " Players Hand" << std::endl;
42 std::cout << vPlayerHand[0][0].GetRank() << "," << vPlayerHand[0][0].GetSuit() << " ";
43 std::cout << vPlayerHand[0][1].GetRank() << "," << vPlayerHand[0][1].GetSuit() << std::endl;
44 */
45 }
.
洞察は役に立ちます。
解決
vPlayerHand
を次のように定義しています。
std::vector<std::vector<Card>> vPlayerHand;
.
vPlayerHand.push_back(arg)
を使用すると、arg
はstd::vector<Card>
型またはstd::vector<Card>
に変換可能である必要があります。Card
の型の引数は、その関数への引数として使用できません。それがあなたが使用しようとしていることです
vPlayerHand.push_back(vShoe.back())
.
必要なものは:
vPlayerHand.push_back(std::vector<Card>());
vPlayerHand.back().push_back(vShoe.back());
vShoe.pop_back();
vPlayerHand.back().push_back(vShoe.back());
vShoe.pop_back();
. 所属していません StackOverflow