按引用传递 - 左值和向量
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");
^
..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
的内存。
相关文章:
- 按值传递变量与按引用传递变量具有相同的结果
- 获取 std::函数以推断按引用传递/按值传递
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 使用 enable_if 在按值传递与按引用传递之间更改函数声明
- 按引用传递和按地址传递之间的差异
- C++按引用传递还是按值传递?
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 使用增量运算符按引用传递
- C++函数,按引用传递
- 按引用传递和动态内存分配之间的区别是什么
- 通过查看程序集来比较按值传递与按引用传递性能
- 在形式参数列表中自动使用 const 和按引用传递的任何明显后果
- 按引用传递函数参数
- C++按引用传递:如何使用调用堆栈
- 为什么按值传递 int 比按引用传递更快
- 是使用按引用传递来填充容器更好,还是使用返回值来填充容器更好
- 为什么 std::bind 在使用按引用传递时防止后期绑定?
- 与 C++ 相比,C# 中的按引用传递的工作方式是否正确?
- C++如何使用按值传递和按引用传递的重载方法
- 按引用传递 - 左值和向量