Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类、数字/数组或对象中的对象 也许我是走远了,但我正在尝试自学C++对象和类的想法,并且构建非常小的游戏。 在那个游戏中,我将拥有一个大对象(类),它将拥有棋盘 我想让这个对象创建NUMBER或PlayerClass对象,每个对象都是该棋盘对象中的一个对象,我不知道有多少(玩家) 我想知道我可以有一个对象数组吗? 我写这段代码是为了说明我在寻找什么: class PlayerClass{ public: ... private: int myLocation[2]; bool isPlayer=false; }; class game{ public: void MakePlayers(int numberOfPlayers){ PlayerClass players[numberOfPlayers]; playerObject=players; Number=numberOfPlayers; } private: PlayerClass *playerObject int Number; }_C++_Class - Fatal编程技术网

类、数字/数组或对象中的对象 也许我是走远了,但我正在尝试自学C++对象和类的想法,并且构建非常小的游戏。 在那个游戏中,我将拥有一个大对象(类),它将拥有棋盘 我想让这个对象创建NUMBER或PlayerClass对象,每个对象都是该棋盘对象中的一个对象,我不知道有多少(玩家) 我想知道我可以有一个对象数组吗? 我写这段代码是为了说明我在寻找什么: class PlayerClass{ public: ... private: int myLocation[2]; bool isPlayer=false; }; class game{ public: void MakePlayers(int numberOfPlayers){ PlayerClass players[numberOfPlayers]; playerObject=players; Number=numberOfPlayers; } private: PlayerClass *playerObject int Number; }

类、数字/数组或对象中的对象 也许我是走远了,但我正在尝试自学C++对象和类的想法,并且构建非常小的游戏。 在那个游戏中,我将拥有一个大对象(类),它将拥有棋盘 我想让这个对象创建NUMBER或PlayerClass对象,每个对象都是该棋盘对象中的一个对象,我不知道有多少(玩家) 我想知道我可以有一个对象数组吗? 我写这段代码是为了说明我在寻找什么: class PlayerClass{ public: ... private: int myLocation[2]; bool isPlayer=false; }; class game{ public: void MakePlayers(int numberOfPlayers){ PlayerClass players[numberOfPlayers]; playerObject=players; Number=numberOfPlayers; } private: PlayerClass *playerObject int Number; },c++,class,C++,Class,为此,您应使用: class game { std::vector<PlayerClass> players_; public: game (std::size_t NumPlayers) : players_ (NumPlayers) {} } 类游戏{ std::向量机; 公众: 游戏(std::大小:玩家{} } 是的,可以,但函数MakePlayers中有错误,应该是 void MakePlayers(int numberOfPlayers){

为此,您应使用:

class game {
    std::vector<PlayerClass> players_;

  public:
    game (std::size_t NumPlayers) : players_ (NumPlayers) {}
}
类游戏{
std::向量机;
公众:
游戏(std::大小:玩家{}
}

是的,可以,但函数MakePlayers中有错误,应该是

void MakePlayers(int numberOfPlayers){

        playerObject= new (PlayerClass*)[numberOfPlayers];
        Number = numberOfPlayers;

        for (int i = 0; i++; i < numberOfPlayers)
        {
            playerObject[i] = new PlayerClass();
        }
    }
void MakePlayers(int numberOfPlayers){
playerObject=新(PlayerClass*)[numberOfPlayers];
数字=玩家数量;
for(int i=0;i++;i

此外,您需要在类析构函数中使用免费的playerObject来避免内存泄漏。另一个建议,请理解指针是什么。

< P>我赞扬你主动教C++的主动性。这不是最容易学的语言,但是一旦你理解了它,它就会非常强大

第一条注释:您希望有多个
PlayerClass
对象。实现这一点的一种方法是使用一个
PlayerClass*
成员变量,该变量指向动态分配的玩家数组,这似乎就是您想要的。但这需要大量的手动内存管理,即使您有使用该语言的经验,也很难做到这一点。我建议改用
std::vector
(确保
#包含
):

vector
支持与常规数组具有相同语义的
[]
运算符,因此您仍然可以作为(例如)
m_播放器[3]
访问单个播放器。此外,
向量
知道它包含多少元素(
size()
成员函数),因此不再需要单独跟踪玩家的数量

祝你好运


更新:你的一个评论说你将从C到C++,所以也许手动内存管理对你来说并不陌生。不过,正如Stephane Rolland指出的,由于标准库中的帮助类,在现代C++中几乎不需要。如果你发现自己想从习惯中去做,首先要考虑是否真的有必要。

嗨,首先是为了你的时间,但是作为一个刚从C来的人,我没有意识到在那里写的东西或它做了什么…学习<代码> STD::向量< /C> >,它是用于数组的C++工具。它与C风格的数组相似,但更容易和更干净。@ JordNyf<代码>但是作为C的人,我不知道它在写什么或者它做了什么>代码>,这意味着不管你知道多少C,C++是不同的语言。你看到的是初等C++。此外,由于您来自“C”,所以我建议加速C++ >代码>,这样您就可以真正地了解C++,而不是从C编程实践开始的“传统”方法。@ JangYF STD::SiZeHT是一种容器长度的类型,我认为它相当于无符号长,STD::vector是模板,它在类型PlayerClass上实例化,在编译时创建一个类型std::vector,这是包含几个类型PlayerClass的对象的标准方式。还有其他的容器模板。也许你更清楚地说明,避免使用指针(如果可能的话,而且经常是可能的)是现代C++中的好方法。好吧,首先它是我的一个大跳跃,看到这个向量,我会读它,现在说,我应该把“STD::矢量MX播放器”放在哪里?第二,我是如何得到尺寸的?应该是“m_players.size()”太多了@JohnnyF我的建议是将
m_players
的声明替换为您现在拥有的
PlayerClass*playerObject
(前缀
m_
是可选的;它只是一些人用于成员变量的约定)。是的,
m_players.size()
将是事后获得玩家数量的方法。
class game
{
   // ...
private:
   std::vector<PlayerClass> m_players; // instead of PlayerClass*
   // no more need for int Number
};
void MakePlayers(int numberOfPlayers)
    : m_players(numberOfPlayers)
{
}
// if you're being rigorous, you'll want to either change numberOfPlayers to
// an unsigned type or ensure it is nonnegative before using it