我正在尝试编写我的代码而不使用全局变量,因为大多数人告诉我这是一个坏习惯,所以我正在改变我的程序的工作方式。
我遇到将类的多个实例传递给另一个类的问题。我需要能够在另一个类中修改类的多个实例。
这是我想要做的事情,但却惨遭失败:
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答案 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方法而不是直接访问类字段