c ++将向量类传递给另一个类

时间:2015-07-29 07:54:57

标签: c++ class

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

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

这是我想要做的事情,但却惨遭失败:

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] - &gt;名称并将其修改为“砂纸”的功能的类

如果不从编译器中获取错误,您将如何处理此问题?

我愿意采用一种完全不同的方式来解决这个问题(我尝试使用结构变量并传递它但我也遇到了其他问题)

谢谢你, Kaven

2 个答案:

答案 0 :(得分:2)

首先,我使用std::vector<Players>(不是指针!)来解决这个问题。其次,我只是将这个引用传递给其他函数。

答案 1 :(得分:1)

我建议这样做:

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方法而不是直接访问类字段