将一个有向量类传递给另一个类

c++ passing a vectored class to another class

本文关键字:另一个 向量 一个      更新时间:2023-10-16

我正在尝试编写不使用全局变量的代码,因为大多数人告诉我这是一个坏习惯,所以我正在改变我的程序的工作方式。

我有问题与传递一个类的多个实例到另一个类。我需要能够在另一个类中修改一个类的多个实例。

这是我想做的,但失败得很惨:

int main() {
Players *player[6];
//preparing 6 instances of Players() so I can loop through them in another class
for (int i = 0;i<6;i++){
player[i] = new Players();
}
player[0]->name = "fluffy";

Players.h

#ifndef PLAYERS_H_
#define PLAYERS_H_
#include <string>
#include <vector>
class Players {
public:
    Players();
    virtual ~Players();
    std::string name;
    bool hand;
    int cif;
    int id;
    std::vector<int> autho;
    std::vector<int> collec;
    std::vector < std::vector <int> > puppet;
};
#endif /* PLAYERS_H_ */

Players.cpp

#include "Players.h"
Players::Players() {
// TODO Auto-generated constructor stub
    name = "";
    hand = false;
    cif = -1;
    id = -1;
}
Players::~Players() {
    // TODO Auto-generated destructor stub
}

现在我想调用另一个类(无关紧要),我想把多实例类播放器传递给它,这样它就可以读取和修改这些实例类中的数据。

例如,一个类的函数可以读取播放器[0]->名称并将其修改为"sandpaper"

你如何做到这一点,而不会从编译器得到错误?

我愿意接受一种完全不同的方法来处理这个问题(我曾尝试使用结构变量并传递它,但我也有其他问题)

谢谢你,Kaven

首先,我将通过使用std::vector<Players>(而不是指针!)来实现这一点。其次,我只是通过引用将向量传递给其他函数。

我建议这样做:

int main() 
{
unique_ptr<vector<Player>> playersVector (new vector<Player>);
    for (int i = 0;i<6;i++)
    {
        playersVector->push_back(Players());
    }
    playersVector->at(0).name = "fluffy";
}

如果你想把这个带有所有权的向量传递给某个方法或类使用:

move(playersVector)

如果你想在主类中拥有所有权,通过普通指针传递:

playersVector.get()

我还建议使用Get/Set方法而不是直接访问类字段