按引用传递 - 左值和向量

Passing by Reference - lvalue and Vectors

本文关键字:向量 按引用传递      更新时间:2023-10-16

C++新手并从事个人项目,但在通过向量列表传递引用时遇到问题。

我需要一个可以调用的函数来将用户添加到用户的运行矢量列表中。其中第一个参数是我要添加到的列表(通过引用(,第二个参数是新用户的名称。

也许我对左值和右值的理解是错误的......但是user_list怎么不是左值呢?上面明确定义过?

我得到的错误是:

error: invalid initialization of non-const reference of type 'std::vector<User*>&' from an rvalue of type 'std::vector<User*>*'
     User *current_user = add_user(&user_list, "Default User");
                                                             ^
..srcmain.cpp:8:7: error: in passing argument 1 of 'User* add_user(std::vector<User*>&, std::string)'
 User *add_user(vector<User *> &user_list, string name);

有问题的代码:

#include <iostream>
#include <vector>
#include "User.h"
using namespace std;
User *add_user(vector<User *> &user_list, string name);
int main() {
    vector<User *> user_list;
    User *current_user = add_user(&user_list, "Default User");
    cout << current_user->name;
    current_user->add_friend(new User("Second"));
    return 0;
}

User *add_user(vector<User *> &user_list, string name) {
    user_list.push_back(new User(name));
    return user_list.at(user_list.end());
}

user_list是一个左值。 &user_list不是。这也是错误的类型。如果仔细检查错误消息,则会注意到类型末尾有一个额外的星号。您正在传递一个指针 ( std::vector<User*>* ( 到一个需要引用 (std::vector<User*>& ( 的函数。只需放下&.

User *current_user = add_user(user_list, "Default User");

您的函数签名是通过引用传递用户列表。 当您呼叫add_user时,您正在传递vector的地址。 去掉函数调用中的 & on 向量,你应该没问题。

另外,不要忘记delete您在add_friend通话中new的内存和您在push_back通话中new的内存。