我想创建一个指针向量,每个指针都指向自己的火星对象,但我不知道如何安排它。我目前遇到错误


  对类型'vector'的非常量左值引用不能绑定到不相关的类型'martianDatabase'的值


但是错误会随着我的每一次更改而不断变化。最近两天我看了很多教程,试图弄清楚这一点,但是我仍然很困惑。

struct Martian
{
    Martian(string fname, string lname, string ssid);
    string fname, lname, ssid;
    ~Martian();
};


class martianDatabase
{
    vector<Martian*> database;
    martianDatabase();
    void addMartian(vector <Martian*> &database, int &iterator, string f,  string l, string id);
    int iterator = 0;
};

Martian::Martian(string f, string l, string id)
{
    fname = f;
    lname = l;
    ssid = id;
}

void martianDatabase::addMartian(vector <Martian*> &database, int &i, string f, string l, string id)
{
    Martian* m = new Martian(f, l, id);
    database[i].push_back(m);
    i++;
}

最佳答案

您的代码有几处错误:


您不应将vector<Martian*>作为参数传递给addMartian,而只能通过this指针进行访问。
不需要int& iterator,因为您要做的就是将Martian添加到向量的末尾
您的代码database[i].push_back(m);获取向量database的第i个元素,即Martian&,然后尝试在其上调用push_back(m),这是不可能的,因为没有为类型声明此类函数Martian,您可能想要的是database.push_back(m),它在m向量的后面插入database


考虑以下替代方法:

class martianDatabase
{
    vector<Martian*> database;
    martianDatabase();
    void addMartian(string f,  string l, string id);
};

void martianDatabase::addMartian(string f, string l, string id)
{
    this->database.push_back(new Martian(f, l, id));
}


尽管这不是真正的问题,但最好直接在构造函数中初始化成员(如果可能),而不是复制分配它们,即使用代码:

Martian::Martian(string f, string l, string id) : fname(f), lname(l), ssid(id) { }

08-16 03:36