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;
}

所以我有一个具有一些功能的类,但是我的主要目标是制作一个类变量向量,然后将其传递给不同的类函数。在此代码中,我将矢量称为晶格,并在set_values中设置其值,然后通过引用将晶格传递给ising_iterator,并希望更改晶格中的某些值。根据文档和其他问题,我认为我必须通过参考(因此在函数声明中)通过向量。但是我似乎仍然会遇到细分错误。我使用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;
}

一切都编译并运行良好。因此,我得出的结论是,传递的类变量是对班级函数的向量和更改它们的媒介,而不是将类变量传递给类函数并在此处更改它们。

vector<vector<int> > lattice(length, vector<int>(length));

您认为这在做什么?它实际上是要声明具有与成员变量相同名称的功能本地vector。此阴影/生皮 是您实际上更改了本地范围的变量,而不是持续的成员 - 因为"获胜"的重复名称是最近的范围。

因此,您正在方法set_values()中更改名为lattice的本地变量。从定义上讲,此类更改无法在此功能之外达到任何内容。然后,局部变量不在任何地方复制或以其他方式"发送"的范围,因此您对其的所有更改都是无关紧要的。

您以后尝试访问方法ising_Iterator()中名为 lattice成员变量,假设您已更改了 it it 具有非零尺寸,则失败,因为您没有't。关于索引,繁荣:segfault。

无论如何,为什么您认为您必须在实例函数之间传递任何成员变量?所有方法都可以完全访问类成员。那就是...使用班级的重点。在成员功能之间传递成员变量 - 虽然您的关闭猜测是错误的,并且如果正确完成,则可以正常工作 - 充其量是毫无意义的,最坏的资源浪费了。

删除阴影本地,停止向成员引用,只需直接在方法中使用成员变量即可。它将起作用。

相关内容

  • 没有找到相关文章

最新更新