私はベクトルであるクラス変数を持っていて、いくつかのクラス関数の間に渡そうとしています。私は何をしようとしているの基本的なバージョンは、キャプチャされ、次のC++セグメンテーションフォールトクラス変数をクラス関数に渡す
#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;
}
だから私はいくつかの機能を持つクラスを持っていますが、私の主な目標は、クラス変数ベクトルを作成し、その後にそれを渡すことです異なるクラス機能。このコードでは、vectorをlatticeと呼んでset_valuesに値を設定してから、参照によってising_Iteratorに格子を渡した後、格子の値を変更したいと思います。文書やその他の質問によると、私は参照によってベクトルを渡さなければならないと考えていました(したがって、関数宣言の&)。しかし、私はまだセグメンテーション違反を取得しているようです。 gdbを使って問題がising_Iteratorにあることを発見したので、クラス関数ising_Iteratorが格子ベクトルにアクセスできないようにする必要があります。私は混乱している理由の一つは、私が
void isingModel::ising_Iterator (vector<vector<int> > & lattice) {
length=1;
}
で
void isingModel::ising_Iterator (vector<vector<int> > & lattice) {
lattice[0][0]=1;
}
を交換する場合、すべてがコンパイルされ、正常に動作ということです。だから私は、あなたが、これが何をやっていたのだと思いました