我是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);
如果您确实想设置 vector 的大小,您可以使用 resize
代替,而不是尝试再次构造它。
Ybus.resize(nbus);
关于c++ - 从一个类调用矩阵到其他/主要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43729442/