【发布时间】:2016-06-30 21:46:14
【问题描述】:
所以我试图有一个类变量,它是一个向量,并在一些类函数之间传递它。我正在尝试做的基本版本如下:
#include <iostream>
#include <string>
#include<stdlib.h>
#include <vector>
using namespace std;
class isingModel {
private:
int length;
public:
void set_values (int);
void ising_Iterator(vector<vector<int> > & );
vector<vector<int> > lattice;
};
void isingModel::set_values (int l) {
length = l;
vector<vector<int> > lattice(length, vector<int>(length));
for (int i=0;i<length;i++){
for (int j=0;j<length;j++){
int randNum = rand() % 2; // Generate a random number either 0 or 1
lattice[i][j]=2*(randNum-.5); //shift value so that it is either 1 or -1.
}
}
}
void isingModel::ising_Iterator (vector<vector<int> > & lattice) {
lattice[0][0]=1;
}
int main () {
int L;
cout << "Enter the length of the lattice: ";
cin >> L;
isingModel iModel;
iModel.set_values(L);
iModel.ising_Iterator(iModel.lattice );
return 0;
}
所以我有一个有一些函数的类,但我的主要目标是制作一个类变量向量,然后将它传递给不同的类函数。在这段代码中,我制作了名为 lattice 的向量并将其值设置在 set_values 中,然后通过引用将 lattice 传递给 ising_Iterator 并希望更改 lattice 中的一些值。根据文档和其他问题,我认为我必须通过引用传递向量(因此函数声明中的 & )。但我似乎仍然遇到分段错误。用gdb发现问题出在ising_Iterator上,所以肯定是类函数ising_Iterator无权访问格向量。我很困惑的原因之一是,如果我更换
void isingModel::ising_Iterator (vector<vector<int> > & lattice) {
lattice[0][0]=1;
}
与
void isingModel::ising_Iterator (vector<vector<int> > & lattice) {
length=1;
}
一切都编译并运行良好。所以我得出的结论是,将作为向量的类变量传递给类函数并更改它们与将类变量传递给类函数并在那里更改它们有着根本的不同..
【问题讨论】:
标签: c++11 vector segmentation-fault