通过参考传递 - 左值和向量

时间:2015-09-22 02:16:01

标签: c++ vector reference g++ pass-by-reference

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");
                                                             ^
..\src\main.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());
}

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

您的功能签名是通过引用传递用户列表。当您拨打vector时,您正在传递add_user的地址。摆脱&amp;在函数调用中的向量上,你应该没问题。

此外,请勿忘记delete来自new来电add_friend的记忆以及new来电push_back的记忆