2017-04-18 32 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 –