2017-10-12 3 views
-1

Ich bin neu in C++ und ich kann nicht verstehen, warum, wenn ich meine Vektor-Methoden aufrufen sie nicht in das Programm reflektiert werden, wenn sie in einer Funktion innerhalb einer Klasse aufgerufen werden, aber wenn ich Nenne sie in main, sie arbeiten. Alles scheint gut zu funktionieren, außer für die Methoden push_back und resize, die in der Vektorklasse codiert sind. Aber wenn ich in der Hauptsache v.push_back(9) code, funktioniert es.Vector Funktion Aufruf funktioniert nicht 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

Können Sie die Codezeile erklären, mit der Sie Probleme haben, und vielleicht Ihr Beispiel so eingrenzen, dass nur die relevanten Teile enthalten sind? –

+0

@RetiredNinja nur die push_back und resize-Methode Aufruf an die Klassenfunktionen, ändert der Code in den Methoden nicht den Vektor. – Jordan

+0

Welcher Vektor? Ich habe deinen Code ausgeführt, und 'itv' wurde definitiv geändert. Sie müssen genau erklären, was das Problem ist. –

Antwort

1

Die vector<int> v in Ihrer Hauptfunktion und die in Ihrer Klasse enthalten sind nicht das Gleiche. Dies liegt daran, dass Sie eine Referenz in setV übergeben, aber das Element selbst ist keine Referenz, also kopiert dies nur Ihren Vektor.

Sie könnten dem Element einen Zeiger (vector<int>*) oder eine Referenz (vector<int>&) geben; Letzteres würde jedoch erfordern, dass Sie es in Ihrem Konstruktor initialisieren, anstatt eine setV-Methode zu verwenden, da Referenzen nach der Konstruktion nicht geändert werden können.

0

sollten Sie getV() verwenden um den Vektor zu erhalten, die Sie Änderungen in Ihrer Klasse zurück in die main Funktion gemacht.

Verwandte Themen