在这种情况下,C++ "Initial value of reference to a non-const must be an lvalue" 的错误意味着什么?
C++ what does the error of "Initial value of reference to a non-const must be an lvalue" mean in this case?
我是 C++ 的完全初学者,被分配编写一个 returns 数字因数的函数。下面,我包含了我也创建的名为 print_vector
的函数,它将把矢量的所有元素打印到控制台。
在我的作业中,为了检查 factorize
函数是否正常工作,我们必须使用提供的 test_factorize
函数,我也包含了该函数。但是,我 运行 遇到的问题是给定的 test_factorize
由于错误“Initial value of reference to a non-const must be an lvalue”而无法工作。我不确定这意味着什么以及为什么 test_factorize
运行 会出现问题,因为 factorize
的输出是一个向量而 print_vector
的输入也是一个向量,所以我不明白为什么 test_factorize
的内容会导致错误,尽管我怀疑它可能是我定义的“factorize”函数中的某些东西导致了这个错误。
#include <iostream>
#include <vector>
using namespace std;
void print_vector(std::vector<int>& v) {
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
}
std::vector<int> factorize(int n) {
std::vector<int> answer;
for (int i = 1;i < n + 1; ++i) {
if (n % i == 0) {
answer.push_back(i);
}
}
return answer;
}
void test_factorize() {
print_vector(factorize(2));
print_vector(factorize(72));
print_vector(factorize(196));
}
错误来自这一行:
void print_vector(std::vector<int>& v) {
由于您没有在参数类型中包含 const
关键字,因此您(隐含地)表明 print_vector
有权修改 v
的内容。
但是,您调用 print_vector()
时使用临时对象(factorize()
返回的向量)作为参数,而 C++ 不允许您通过非常量传递临时对象参考,大概是基于对临时对象进行更改是没有意义的理论(因为临时对象将在函数调用 returns 后立即被销毁,因此对其进行的任何更改都将无效)因此必须程序员错误。
无论如何,修复很简单,只需将您的函数声明更改为:
void print_vector(const std::vector<int>& v) {
...这将允许您向它传递一个临时向量的引用。
我是 C++ 的完全初学者,被分配编写一个 returns 数字因数的函数。下面,我包含了我也创建的名为 print_vector
的函数,它将把矢量的所有元素打印到控制台。
在我的作业中,为了检查 factorize
函数是否正常工作,我们必须使用提供的 test_factorize
函数,我也包含了该函数。但是,我 运行 遇到的问题是给定的 test_factorize
由于错误“Initial value of reference to a non-const must be an lvalue”而无法工作。我不确定这意味着什么以及为什么 test_factorize
运行 会出现问题,因为 factorize
的输出是一个向量而 print_vector
的输入也是一个向量,所以我不明白为什么 test_factorize
的内容会导致错误,尽管我怀疑它可能是我定义的“factorize”函数中的某些东西导致了这个错误。
#include <iostream>
#include <vector>
using namespace std;
void print_vector(std::vector<int>& v) {
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
}
std::vector<int> factorize(int n) {
std::vector<int> answer;
for (int i = 1;i < n + 1; ++i) {
if (n % i == 0) {
answer.push_back(i);
}
}
return answer;
}
void test_factorize() {
print_vector(factorize(2));
print_vector(factorize(72));
print_vector(factorize(196));
}
错误来自这一行:
void print_vector(std::vector<int>& v) {
由于您没有在参数类型中包含 const
关键字,因此您(隐含地)表明 print_vector
有权修改 v
的内容。
但是,您调用 print_vector()
时使用临时对象(factorize()
返回的向量)作为参数,而 C++ 不允许您通过非常量传递临时对象参考,大概是基于对临时对象进行更改是没有意义的理论(因为临时对象将在函数调用 returns 后立即被销毁,因此对其进行的任何更改都将无效)因此必须程序员错误。
无论如何,修复很简单,只需将您的函数声明更改为:
void print_vector(const std::vector<int>& v) {
...这将允许您向它传递一个临时向量的引用。