2017-10-12 4 views
-1

Je suis nouveau en C++ et je ne comprends pas pourquoi quand j'appelle mes méthodes vectorielles, elles ne sont pas reflétées dans le programme lorsqu'elles sont appelées dans une fonction à l'intérieur d'une classe, mais si je appelez-les en main, ils travaillent. Tout semble fonctionner correctement mais pour les méthodes push_back et redimensionnement codées dans la classe vector. Mais si je code v.push_back(9) dans l'ensemble, cela fonctionne.La fonction de vecteur appelant ne fonctionne pas C++

#include <iostream> 
#include "ITIntVector.h" 
using namespace std; 
int main() { 
    int index = 1, rsize = 10; 
    vector<int> v = { 1,2,3,4,5 }; 
    ITIntVector itv; 
    vector<int> getV(); 
    void setV(vector<int>&); 
    itv.push_back(index); 
    itv.resize(rsize); 
    system("pause"); 
} 

#pragma once 
#include <vector> 
using namespace std; 
class ITIntVector 
{ 
    vector<int> v; 
public: 
    ITIntVector(); 
    void push_back(int&); 
    void resize(int& i); 
    vector<int> getV(); 
    void setV(vector<int>&); 
}; 

#include "ITIntVector.h" 
using namespace std; 
#include <vector> 
#include <string> 

void ITIntVector::push_back(int& val) { 
    v.push_back(val); 
} 

void ITIntVector::resize(int& size) { 
    v.resize(size); 
} 

vector<int> ITIntVector::getV() { 
    return v; 
} 

void ITIntVector::setV(vector<int>& v) { 
    this->v = v; 
} 
+2

Pouvez-vous expliquer la ligne de code qui vous pose problème, et peut-être affiner votre exemple pour n'inclure que les parties pertinentes? –

+0

@RetiredNinja juste l'appel de méthode push_back et resize aux fonctions de classe, le code à l'intérieur des méthodes ne change pas le vecteur. – Jordan

+0

Quel vecteur? J'ai exécuté votre code, et 'itv' est définitivement changé. Vous devrez expliquer exactement quel est le problème. –

Répondre

1

Le vector<int> v dans votre fonction principale et celui contenu dans votre classe ne sont pas les mêmes. C'est parce que vous passez une référence dans setV, mais le membre lui-même n'est pas une référence, donc cela ne fait que copier votre vecteur.

Vous pouvez faire du membre un pointeur (vector<int>*) ou une référence (vector<int>&); cependant, ce dernier vous demanderait de l'initialiser dans votre constructeur, plutôt que d'utiliser une méthode setV, car les références ne peuvent pas être modifiées après la construction.

0

Vous devez utiliser getV() pour obtenir le vecteur que vous avez fait des changements dans votre classe de nouveau dans la fonction main.