从一个类调用Matrix到其他/ main

时间:2017-05-02 03:09:15

标签: c++ matrix

我是C ++的新手,并为自己的项目开发了一个电力系统仿真算法......

到目前为止,我的负载流算法得到了很好的结果。 我试图通过创建许多类来优化计算。

但是,对于每个变量xxx,(int,double,array / vector)我能够使用Class.xxx在类外调用它,矩阵类型(vector<vector<complex<double>>>除外) 。这是代码的一部分:

class Load_Flow_Class {
public:

    vector<vector<complex<double>>> Ybus; // this is a complexe matrix

    vector<complex<double>> LPQIK; 
    vector<complex<double>> LPQKI; 
    complex<double> TotalLineLoses;
    int slackbus;

//....... initiate matrix and calculate values.....................

    void YBIKmatrix (int nbus) {
        vector<vector<complex<double>>> Ybus(nbus);

        for (int i = 0; i < nbus; i++) {
            Ybus[i].resize(nbus);
        }
        for (int i = 0; i < nbus; i++) {
            for (int j = 0; j < nbus; j++) {
                Ybus[i][j]=/*.....*/
            }
        }
    }

cout << LF.Ybus[i][j]; //-------------> no issue

//.................from main()......................

nbus = 5; //example

Load_Flow_Class LF;
LF.YBIKmatrix(nbus);

for (int i /*....*/) {
    for (int j /*....*/) {
        cout << LF.Ybus[i][j];
        //----> no display and cause the program to stop 
    }
}

这仅适用于矩阵类型(Ybus

1 个答案:

答案 0 :(得分:1)

当我编辑你的问题以使其更清晰时,我特别注意到两行。类定义中的这一行:

vector<vector<complex<double>>> Ybus; // this is a complexe matrix

YBIKmatrix方法中的这一行:

vector<vector<complex<double>>> Ybus(nbus);

因为你在成员函数中再次声明了变量,所以它 shadow 类成员Ybus。函数中Ybus发生的所有更改只发生在局部变量,而不是类变量。

要解决此问题,请在成员函数中删除此行:

vector<vector<complex<double>>> Ybus(nbus);

如果您确实想要设置向量的大小,可以改为使用resize,而不是尝试再次构造它。

Ybus.resize(nbus);