通过引用传递 - 左值和向量
Passing by Reference - lvalue and Vectors
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());
}
user_list
是左值。 &user_list
不是。这也是错误的类型。如果仔细检查错误消息,您会注意到类型末尾有一个额外的星号。您正在将指针 (std::vector<User*>*
) 传递给需要引用 (std::vector<User*>&
) 的函数。只需删除 &
.
User *current_user = add_user(user_list, "Default User");
您的函数签名是通过引用传递用户列表。当您调用 add_user
时,您正在传递 vector
的地址。去掉函数调用中 vector 上的 & 你应该没问题。
此外,不要忘记 delete
new
在 add_friend
调用中的记忆和 new
在 push_back
调用中的记忆.
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());
}
user_list
是左值。 &user_list
不是。这也是错误的类型。如果仔细检查错误消息,您会注意到类型末尾有一个额外的星号。您正在将指针 (std::vector<User*>*
) 传递给需要引用 (std::vector<User*>&
) 的函数。只需删除 &
.
User *current_user = add_user(user_list, "Default User");
您的函数签名是通过引用传递用户列表。当您调用 add_user
时,您正在传递 vector
的地址。去掉函数调用中 vector 上的 & 你应该没问题。
此外,不要忘记 delete
new
在 add_friend
调用中的记忆和 new
在 push_back
调用中的记忆.