2017-05-02 15 views
0

への一つのクラスからマトリックスを呼び出すこれまでのところ私は潮流アルゴリズムのために非常に良い結果を得ました。 私は多くのクラスを作成して計算を最適化しようとしています。は</p> <p>....私はC++に新しいですし、私自身のプロジェクトのための電力システムのシミュレーションアルゴリズムの開発をメイン/他

しかし、各変数xxxため、(INT、倍、アレイ/ベクトル)Iは、マトリクス型(vector<vector<complex<double>>>)を除いて、Class.xxxを使用して、クラス外でそれを呼び出すことができました。これは、コードの一部です:

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

答えて

1

で起こる、私は特に2つの行を気づきました。クラス定義では、この行:​​方法で

vector<vector<complex<double>>> Ybus; // this is a complexe matrix 

そして、この行:

vector<vector<complex<double>>> Ybus(nbus); 

あなたはメンバ関数で再び変数を宣言しているので、それクラスメンバYbus。関数内でYbusに発生したすべての変更は、クラス変数ではなくローカル変数にのみ発生します。この問題を解決するには

は、メンバ関数にこの行を削除:あなたは、ベクトルの大きさを設定したいならば、あなたはむしろそれを再度構築しようとするよりも、代わりにresizeを使用することができます

vector<vector<complex<double>>> Ybus(nbus); 

Ybus.resize(nbus); 
+0

こんにちは、アドバイスありがとうございます。 –

+0

この行は、行列のサイズを初期化するための行です。メンバー関数からこの行を削除することで、それは機能しましたか? –

+0

@HatemTagourti行列のサイズを初期化したい場合は、ループのように 'resize'関数を使うことができます。私は明確にするために私の答えを更新します。 – InternetAussie

関連する問題