C++ 将矩阵从一个类调用到另一个/main

C++ 将矩阵从一个类调用到另一个/main,c++,matrix,C++,Matrix,到目前为止,对于潮流算法,我得到了非常好的结果。 我试图通过创建许多类来优化计算 但是,对于每个变量xxx,(int、doubles、array/vector),我可以使用class.xxx在类外调用它,矩阵类型(vector)除外。这是代码的一部分: class Load_Flow_Class { public: vector<vector<complex<double>>> Ybus; // this is a complexe matrix

到目前为止,对于潮流算法,我得到了非常好的结果。 我试图通过创建许多类来优化计算

但是,对于每个变量
xxx
,(int、doubles、array/vector),我可以使用
class.xxx
在类外调用它,矩阵类型(
vector
)除外。这是代码的一部分:

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;//这是一个复数矩阵
向量LPQIK;
向量LPQKI;
复合全封闭;
int-slackbus;
//……启动矩阵并计算值。。。。。。。。。。。。。。。。。。。。。
无效YBIKmatrix(int nbus){
向量Ybus(nbus);
对于(int i=0;i

这只发生在矩阵类型(
Ybus

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

vector<vector<complex<double>>> Ybus; // this is a complexe matrix
因为您在成员函数中再次声明了变量,所以它会对类成员
Ybus
进行阴影处理。函数中发生在
Ybus
上的所有更改只发生在局部变量上,而不是类变量上

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

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

此行用于初始化矩阵的大小。通过从成员函数中删除此行,是否有效?@HatemTagourti如果要初始化矩阵的大小,可以像在循环中一样使用
resize
函数。我将更新我的答案以澄清问题。我删除了用于矩阵初始化的行,但它不起作用,因为没有完整大小不完整。我将Ybus传递给YBIKmatrix成员函数。我在类外复制该矩阵,并返回到同一类中的其他成员函数…这只发生在矩阵上,而不是另一个数组(向量)。我在成员函数内使用相同的方法进行初始化,没有任何问题
vector<vector<complex<double>>> Ybus(nbus);
Ybus.resize(nbus);