我是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
)
答案 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);