2016-12-07 16 views
0

このコードはファイルからデータを読み込み、オブジェクトの配列gの内容をチェックしようとすると、クラスグラフのオブジェクトの2次元動的配列 に保存します。データをアレイに保存するのを手伝ってください。C++ 2dオブジェクトの動的配列

class graph 
{ 
public: 
    int index; 
    int c; 
    int p1; 
    int p2; 
    int s1; 
    int s2; 
    int t1; 
    int t2; 
    int weight; 
    bool ready; 
    graph(int index,int c, int p1, int p2, int s1, int s2,int t1, int t2, int weight,int ready) 
    { 
     index = index; 
     c = c; 
     p1 = p1; 
     p2 = p2; 
     s1 = s1; 
     s2 = s2; 
     t1 = t1; 
     t2 = t2; 
     weight = weight; 
     ready = ready; 
    } 

}; 

これは主コードで

int main(){  char argc[20]; int m,index,c,p1,p2,s1,s2,t1,t2,weight,ready; //graph temp(0,0,0,0,0,0,0,0,0,0); fstream f; 

    cout << "Input file name: "; cin >> argc;  f.open(argc, ios::in); f >> m; 

    graph **g=new graph*[m];  int i = 1; while (!f.eof()) { 

     f >> index >> c >> p1 >> p2 >> s1 >> s2 >> t1 >> t2 >> weight >> ready;   g[i] = new graph(index, c, p1, p2, s1, s2, t1, t2, weight, ready); 
      cout<< g[i]->index; 
      i = i + 1; 

      } return 0; } 
+0

これは間違いなくコンパイルされますか?私の理解では、メソッドのパラメータはクラスのメンバとは異なる名前にする必要があります( 'this-> '構文を使わなくて済むように)。 –

+0

'main'関数を再フォーマットすることを強くお勧めします。コンパイラは気にしませんが、あなたを助けたい人は気にしません。 –

+0

あなたの人生を楽にし、動的配列の代わりに 'std :: vector'を使います。 –

答えて

0

簡略化し、オブジェクトの初期化の問題、上記簡略場合

class graph 
{ 
    public: 
     int index; 
     graph(int index) 
     { 
     index = index; 
     } 
}; 

  index = index; 

がない行有用なことをする。それは自己割り当てです。 LHSのindexはメンバー変数ではありません。これが議論です。メンバ変数はまだ初期化されていません。

を使用でき

 graph(int index) 
     { 
     this->index = index; 
     } 

は、より良いまだ、私が使用することをお勧め:

 graph(int index) : index(index) {} 

すべてのメンバ変数の変更を行います。