C++什么是错误的"初始价值的参考非常量必须是一个左值"的意思是在这种情况下?

0

的问题

我是一个完整的初级到C++和被分配到编写一个函数,返回的因素的数量。 下面,我已经包括的功能我还创建了所谓的 print_vector 这将打印的所有要素的矢量控制台。

在我的任务,以便检查 factorize 功能工作时,我们必须使用 test_factorize 提供的功能,我有也包括在内。 然而,这个问题我已经运到的是,鉴 test_factorize 不会的工作由于错误"初始价值的参考非常量必须左值。" 我不确定这意味着什么和为什么 test_factorize 跑进一个问题,因为输出 factorize 是一个矢量和输入 print_vector 也是一个矢量,所以我不明白为什么内容 test_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));
}
c++ function stdvector
2021-11-23 23:13:16
1

最好的答案

2

错误是从这一行:

void print_vector(std::vector<int>& v) {

因为你没有包括的 const 关键的参数类型,你是(隐含的)指示 print_vector 有权修改的内容 v.

但是,你打电话 print_vector() 与一个临时目(矢量返回的 factorize())作为一个参数,C++不允许通过一个临时目的通过非常量参考,大概是在理论改变为一个临时的对象是没有意义的(因为临时是将被销毁,尽快功能呼叫的返回,因此任何变化,将不会有效果),因此必须是程序员的错误。

在任何情况下,修复是很容易的,只是改变你的功能宣言》:

void print_vector(const std::vector<int>& v) {

...这会让你通过一个参考到一个-暂时的-矢量。

2021-11-23 23:17:43

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................