从一个类调用矩阵到另一个类/主类
Calling a Matrix from one class to other / main
我是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);
相关文章:
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 两个抽象类,派生自同一个基类.如何访问从一个抽象类到另一个抽象类的指针
- C++多态性:如何测试一个类是否派生自另一个基类
- 派生类不能用另一个基类的成员重载基类中的私有成员
- 是否可以在引用另一个派生类的派生类中声明复制构造函数?
- 如何在 C 中包装C++具有参数的类方法或返回另一个C++类的实例?
- 如何将抽象类的可访问性限制为另一个抽象类及其子类?
- 如何在Qt Creator中将函数从一个类调用到另一个(主)类?
- 将其转换为共享指针,并将其作为参数传递给另一个C++类
- 使用另一个模板类的嵌套名称说明符专用化模板类
- 从具有相同基数的另一个派生类调用派生类的非 const 方法
- 如何知道模板类中另一个模板类的类型
- 为什么当一个模板类继承自另一个模板类时,需要重新指定 typedef 并限定函数调用?
- 为什么将好奇模板模式的基类直接转换为另一个基类是错误的?
- 从基类(车辆)继承方法,从派生类(汽车)继承值,以使用 C++ 在另一个派生类(车道)中实现
- 调用对象类方法,该方法在另一个对象类中的向量中
- C :从一个基础到另一个基类模板的动态铸造
- 从抽象基类访问另一个基类成员
- "{"令牌 c++ 继承问题之前的另一个预期类名
- C 模板成员函数作为另一个模板类的接口