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);