C++ ce înseamnă eroare de "valoarea Inițială de referință de la un non-const trebuie să fie un lvalue" înseamnă în acest caz?

0

Problema

Eu sunt un incepator la C++ și a fost repartizat pentru a scrie o funcție care returnează factorilor de un număr. Mai jos, am inclus funcția-am creat, de asemenea, numit print_vector care se va imprima toate elementele unui vector la Consola.

În misiunea mea, în scopul de a verifica dacă factorize funcția este de lucru, trebuie să utilizați test_factorize funcția furnizate, care trebuie, de asemenea, incluse. Cu toate acestea, problema pe care am rula în este care a dat test_factorize nu merge din cauza de eroare "valoarea Inițială de referință de la un non-const trebuie să fie un lvalue." Nu sunt sigur ce înseamnă asta și de ce test_factorize se execută într-o problemă, deoarece producția de factorize este un vector și de intrare de print_vector este, de asemenea, un vector, deci nu văd de ce conținutul de test_factorize rezulta într-o eroare, deși bănuiesc că ar putea fi ceva în `factorize' am definit funcția care determină această eroare.

#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

Cel mai bun răspuns

2

Eroarea este de la această linie:

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

Din moment ce nu include const cuvinte cheie în argumentul de tip, sunt (implicit) indică faptul că print_vector are dreptul de a modifica conținutul v.

Cu toate acestea, vă sunt de asteptare print_vector() cu un obiect temporar (vectorul returnat de factorize()) ca un argument, și C++ nu permite să treacă temporar un obiect de non-const referință, probabil pe teoria că efectuarea de modificări la un obiect temporar este inutil (pentru că temporară este de gând să fie distruse cât mai curând apelul funcției se întoarce, astfel încât orice modificări aduse nu ar avea nici un efect) și, prin urmare, trebuie un programator de eroare.

În orice caz, fix este ușor, trebuie doar să schimbați funcția declarația asta:

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

... și care vă va permite să treacă o referință-pentru-o-temporar-vector pentru ea.

2021-11-23 23:17:43

În alte limbi

Această pagină este în alte limbi

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