2017-10-12 48 views
-1

我是新来的c + +,我不明白为什么当我调用我的矢量方法时,他们没有被反映在程序中时,他们被称为类中的函数,但如果我他们主要打电话给他们,他们工作。一切似乎都很好,但对于vector类中的push_back和resize方法编码。但如果我在主代码v.push_back(9),它的作品。调用不工作的矢量函数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

你能解释一下你遇到的代码行吗,也许缩小你的例子只包含相关部分? –

+0

@RetiredNinja只是对类函数的push_back和resize方法调用,方法内的代码不会改变向量。 – Jordan

+0

哪个矢量?我已经运行你的代码,'itv'肯定是改变了。你需要解释到底是什么问题。 –

回答

1

您的主要功能中的vector<int> v与您班中包含的vector<int> v不一样。这是因为您在setV中传递参考,但成员本身不是参考,所以这只会复制您的向量。

您可以让会员成为指针(vector<int>*)或参考(vector<int>&);然而,后者将要求您在构造函数中初始化它,而不是使用setV方法,因为在构造之后不能修改引用。

0

您应该使用getV()让你在你的类所做的更改回main功能的载体。