2017-04-18 91 views
0

我正在學習使用Visual Studio 2015 ++的C++C++通過用戶輸入指向對象的向量

我正在研究它,我不能通過一些東西。也許你可以給我更好的見解。

我學到了關於類,結構,數組和函數的一些東西。

我想創建一個程序,使用幾名球員,但是可以從2-4變化(例如:

class Player{ 
public: 
    Player(){ 
     hp=5; 
     mana=10; 
     alive=false; 
    }; 

    int hp; 
    int mana; 
    bool alive; 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    // data here // 
    retry: 
    cin >> numberofPlayers; 

    if (numberofPlayers < 2 || numberofPlayers>4) 
    { 
     cout << "That's Impossible! Don't mock me!" << endl; 
     goto retry; 
    } 
    else 
    { 
     cout << "Great!" << endl; 
    } 
後,所以

,我想創建指針到對象的載體中將存儲在不同的球員變量

如:

這裏我的問題開始:)

Player* pointerplayer = new Player(); 


vector<Player*> vectorPlayer; 
Player* pointerplayer = new Player(); 

for (int i = 0; i < numberofPlayers; i++) 
{ 
    vectorPlayer.push_back(new Player()); 
    cout << vectorPlayer[i] << endl; 
} 

我的問題是當我嘗試看到輸出時,我猜測指針的地址。

01639B40 
01643F98 
01643C80 

和我所要的輸出是這樣的:

1 
2 
3 

我知道,我沒有做它proprely,但事情是逃避我,我不能夠看到它proprely 。

因爲我想創建2-4個玩家,這是基於用戶輸入的。併爲每個玩家創建一個Player(),其中包含每個玩家的所有變量。 (1,2,3,4)的輸出取決於數字。

+1

如果你想看到一個數字,打印'i'。但是,爲什麼你使用了一個指針向量而不是一個向量的玩家? – melpomene

+0

另一方面,1)'_tmain'和'_TCHAR'是Microsoft的擴展,通常不是可移植的。如果將來使用不同的編譯器(例如GCC或Clang),它們可能不起作用。 2)[你可以在沒有'goto'的情況下創建循環(http://ideone.com/e5nAf9)這通常是首選,因爲它們更容易跟蹤(條件告訴它是重新循環還是停止, 'continue'基本上是'goto condition;','break'基本上是'goto next_line_after_loop;')。 –

+0

是的,我已經搜索過,也許更好?但我認爲我可以設法在使用指針的內存管理方面更高效,並在堆中正確分配它們。 @melpomene –

回答

0

更改您的COUT聲明:

cout << (i + 1) << endl; 
+0

它的工作。但是現在我仍然可以在對象成員內進行訪問了嗎?像惠普等?通過(*迭代器) - >? –

+0

使用vectorPlayer [i] .hp –