C++ que signifie l'erreur de "valeur Initiale de référence non const doit être une lvalue" dans ce cas?

0

La question

Je suis un débutant en C++ et a été affecté à écrire une fonction qui renvoie les facteurs d'un nombre. Ci-dessous, j'ai inclus la fonction que j'ai créé également appelé print_vector imprimer tous les éléments d'un vecteur à la Console.

Dans ma mission, afin de vérifier si le factorize fonction, il faut utiliser la test_factorize fonction, que j'ai également inclus. Cependant, le problème que j'ai exécuté, c'est que la donnée test_factorize ne fonctionne pas en raison de l'erreur "valeur Initiale de référence non const doit être une lvalue." Je ne suis pas sûr de ce que cela signifie et pourquoi l' test_factorize se heurte à un problème, parce que la sortie de factorize est un vecteur et l'entrée de print_vector est également un vecteur, donc je ne vois pas pourquoi le contenu de test_factorize suite à une erreur, bien que je soupçonne qu'il pourrait être quelque chose de l'intérieur de la " factoriser la fonction que j'ai défini que la cause de cette erreur.

#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

La meilleure réponse

2

L'erreur est à partir de cette ligne:

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

Puisque vous n'avez pas inclure l' const mot-clé dans l'argument-type, vous êtes (implicitement) indiquant que print_vector a le droit de modifier le contenu de v.

Cependant, vous appelez print_vector() avec un objet temporaire (le vecteur renvoyé par factorize()) comme argument, et le C++ n'est pas vous permettre de passer un objet temporaire par des non-const de référence, probablement sur la théorie que de faire des changements à un objet temporaire est inutile (parce que le temporaire va être détruite dès que l'appel de la fonction retourne, afin que toutes les modifications apportées aurait aucun effet) et doit par conséquent une erreur du développeur.

Dans tous les cas, la solution est facile, il suffit de changer votre déclaration de fonction à ceci:

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

... et qui vous permettra de passer une référence-pour-un-temporaire-vecteur d'elle.

2021-11-23 23:17:43

Dans d'autres langues

Cette page est dans d'autres langues

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