从一个类调用矩阵到另一个类/主类

Calling a Matrix from one class to other / main

本文关键字:另一个 主类 调用 一个      更新时间:2023-10-16

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

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

然而,对于每个变量xxx(int,doubles,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)

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

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

YBIKmatrix方法中的这一行:

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

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

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

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

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

Ybus.resize(nbus);
相关文章: