所以我試圖讓一個類變量是一個向量並將它傳遞給一些類函數。什麼我試圖做一個基本的版本是在捕獲以下內容: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;
}
所以我有了一些功能的一類,但我的主要目標是使類變量矢量,然後把它傳遞給不同的功能。在這段代碼中,我創建了一個名爲lattice的向量,並在set_values中設置了它的值,然後通過引用將lattice傳遞給了ising_Iterator,並且想要在lattice中更改一些值。根據文檔和其他問題,我想我必須通過引用傳遞向量(因此函數聲明中的&)。但我似乎仍然遇到分段錯誤。我使用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;
}
一切編譯並運行良好。所以我的結論是,通過類變量是向量類的功能和改變它們有本質的區別則只是路過類變量類的功能,改變他們那裏..