怪物阵列不能按我需要的方式工作

时间:2013-06-26 04:37:32

标签: c++

我的问题是,我希望每次都能

Player
创建

,以便添加分配给该播放器的Monster类的10个实例。

到目前为止我的工作......

MAIN.CPP //允许用户添加播放器。

if (myMenuChoice == 1) // add a player
      {
          if (numberOfPlayers>4)
          { 
              cout<<"Max of 5 players!"<<endl;
          }else{
              player[(numberOfPlayers)].addPlayer((numberOfPlayers));//create player class  
              numberOfPlayers++;

}

PLAYER.CPP

#include "main.h"

    Monster myMonsters[10]; //up to ten monsters on a team

Player::Player()
{

}

void Player::addPlayer(int x)
 {
    cout<<"added player"<<x<<endl;
    this->karma=0;
 }

所以我想到的是,当添加一个玩家时,它应该创建10个myMonsters吗?还是我宣布错了? 因此,如果我创建播放器[1],我现在应该有player1.myMonster [0]抛出myMonster [9]这将是来自player2.myMonster [0]的不同值抛出myMonster [9]

现在,当我为播放器列出myMonsters时,它会给出奇怪的输出 我选择了player1怪物

1
4
2

我选择了player2怪物

5

按此顺序,当我为player1列出怪物时,我得到了

5
4
2

它似乎只是制作一个myMonsters [10]而不是每个课程,我怎么能解决这个问题呢?

不确定你是否需要如何添加怪物或查看它们,但在这里,

在main.ccp中

player[x].addMonster(monsterSelection);//add monster to this player class

player.cpp

void Player::addMonster(int monstername)
{
    int x=0;  //first monster
    if(this->numberOfMonsters >0)//do they have monsters all ready?
        x=this->numberOfMonsters;
    else
        this->numberOfMonsters = x;
    if (x<10)   
    {
        myMonsters[x].getNewMonster(monstername);
        this->numberOfMonsters++;
        cout<<"current number of monsters is: "<<numberOfMonsters;
    }
    else
        cout<<"sorry no more monsters for you!! 10 max"<<endl;
}

列出怪物

player[x].listMyMonsters();

在player.cpp中

void Player::listMyMonsters()
{
    int x;
    x = this->numberOfMonsters;
    cout<<"Total number of monsters: "<<numberOfMonsters<<endl;
    int monsterCount=0;
    while(x!=0)
    {   
        cout<<"Monster ";
        cout<< monsterCount ;
        cout<<":\t";
        cout<<myMonsters[monsterCount].name;
        monsterCount++;
        cout<<"\n";
        x--;
    }
}

更新


if i add myMonsters in player.h class errors i get.
1>c:\documents and settings\tngmorse\desktop\test monsters\monstertest\monstertest\player.h(13) : error C2146: syntax error : missing ';' before identifier 'myMonsters'
1>c:\documents and settings\tngmorse\desktop\test monsters\monstertest\monstertest\player.h(13) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\tngmorse\desktop\test monsters\monstertest\monstertest\player.h(13) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

player.h

    enum Race {none,Living, Dead, Nature};
class Player
{
    public:
     Player();
    ~Player(){}


    int numberOfMonsters;
    int karma;
    bool myTurn;
    Race myRace;
    Monster myMonsters[10]; //up to ten monsters on a team


    void addPlayer(int x);
    void addMonster(int monstername);
    void listMyMonsters();
    Race getRace() const { return myRace; }


};

1 个答案:

答案 0 :(得分:1)

正如@Patashu指出的那样。你在Monster myMonsters[10];的声明之外声明class Player,所以它不是每个实例的变量,它在整个程序中都存在一次

这是使Monster成为Player成员变量的方法。下面的代码将编译。添加您需要的任何其他语句,添加到代码

// Player.h

#ifndef PLAYER
#define PLAYER
#include "Monster.h"
class Player
{
      Monster M[10];
};
#endif

// Monster.h

#ifndef MONSTER
#define MONSTER

class Monster
{

};

#endif

// Main.h

#ifndef MAIN
#define MAIN

#include "Player.h"
#include "Monster.h"

#endif

// main.cpp中

#include "Main.h"

int main()
{
    Player P;
    return 0;
}