C++, čo robí chybu "Počiatočná hodnota odkaz na non-konšt musí byť lvalue" znamená v tomto prípade?

0

Otázka

Som úplný začiatočník C++ a bolo pridelené, ak chcete napísať funkciu, ktorá vracia faktorov číslo. Nižšie som už zahrnuté funkcia tiež som vytvoril s názvom print_vector že bude tlačiť všetky prvky vektora na Konzoly.

V mojom priradenie, s cieľom zistiť, či factorize funkcia pracuje, musíme použiť test_factorize funkcie za predpokladu, ktorú som si tiež zahrnuté. Avšak, problém som bežať v je, že vzhľadom na test_factorize nefunguje kvôli chybe "Počiatočnú hodnotu odkaz na non-konšt musí byť lvalue." Ja som si nie ste istí, čo to znamená a prečo test_factorize beží do problém, pretože výstup factorize je vektor a vstup print_vector je tiež vektor, tak nevidím dôvod, prečo obsah test_factorize výsledok chyba, keď mám podozrenie, že to môže byť niečo v "factorize' funkcia som definovaný, ktoré spôsobuje táto chyba.

#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

Najlepšiu odpoveď

2

Chyba je z tohto linku:

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

Keďže ste nemali obsahovať const kľúčové slová vo argument typu, ste, sú (implicitne) naznačuje, že print_vector má právo upraviť obsah v.

Avšak, voláte print_vector() s dočasný objekt (vektorové vráti factorize()) ako argument, a C++ neumožňuje vám prejsť dočasný objekt non-konšt odkaz, pravdepodobne na teórii, že vykonanie zmien na dočasný objekt je nezmyselné (pretože dočasné bude zničené hneď ako volanie funkcie sa vráti, tak akékoľvek zmeny by to mať žiadny účinok), a preto musí programátor chyba.

V každom prípade, problém je jednoduché, stačí zmeniť svoje funkcie vyhlásenie na toto:

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

... a že vám umožní odovzdať odkaz-na-na-na dočasné vektora na to.

2021-11-23 23:17:43

V iných jazykoch

Táto stránka je v iných jazykoch

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