c++ - 从一个类调用矩阵到其他/主要

标签 c++ matrix

我是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/

相关文章:

c++ - 奇怪的线程执行顺序?

java:如何实现数学解析

c++ - DLIB C++ 如何制作 dlib::matrix 的 std::vector

c# - C# 中的矩阵乘法方法

python - 比较两个不同大小的矩阵以生成一个大矩阵 - 速度改进?

C++:RVO、NRVO 和返回本地对象

c++ - 如何修复重叠的 XML?

c++ - 插入后 vector 迭代器失效

c++ - STL 映射迭代器运行时错误

python - 查找满足条件的 2D numpy 数组的索引