2016-08-11 3 views
0

多次元配列bool配列を作成し、bool値を多次元に格納し、多次元配列を出力する関数を含むクラスを作成しています。C++クラスは局所解体に頼っています

これまでのところ、私のクラスは今のところうまく動作します。しかし、クラス関数がタスクを完了するたびに、クラス関数がローカルの多次元配列を作成する必要がないようにしたいと思います。メンバーデータとして作成することができれば理想的ですが、それが可能かどうか、少なくとも私は間違ったことを何度もやっているので、それは不可能だと私に信じさせました。私はまだCと新しいです

サイドノートでは++ので、私は、彼らがどのように動作するか分からないので、ポインタを含む答えを提出しないでください、それは一瞬だけで、より多くの私を混乱させます。

は、ここに私のコードで、あなたの時間と入力はそれが非常に高く評価されてくれてありがとう!

//----------------------------------------------------------------------- 
//class declorations. 
// .h file 
#ifndef STACK_H 
#define STACK_H 
using namespace std; 

class stackClass{ 
    public: 
     const static int index_one = 10; 
     const static int index_two = 10; 
     //const static bool boolray[index_one][index_two]; 
     stackClass(); 
     void set(const int iacross, const int ivert); 
     void print(); 


    private: 
     int across; 
     int vert; 
     const static bool the_array[index_one][index_two]; 


}; 

#endif 
//---------------------------------------------------------------------------- 
// class definitions 
// .cpp file 

#include<iostream> 
#include "stack.h" 
using namespace std; 

stackClass :: stackClass(){ 
bool the_array[index_one][index_two]; 
for(int across = 0; across < index_one; across++) 
    for(int vert = 0; vert < index_two; vert++) 
     the_array[across][vert] = false; 
} 

void stackClass :: print(){ 
    bool the_array[index_two][index_one]; 
    for (int across = 0; across < index_one; across++){ 
     for (int vert = 0; vert < index_two; vert++){ 
       if(the_array[across][vert] == true){ 
        cout << "*"; 
       } 
       else{ 
        cout << " "; 
       } 

     } 
cout << endl; 
    } 
    } 

void stackClass :: set(int iacross, int ivert){ 
iacross=across; 
ivert=vert; 
} 
//-------------------------------------------------- 
// clinet program for testing 
// .cpp file 
#include<iostream> 
#include "stack.h" 
#include <cstdlib> 
using namespace std; 

int main(){ 

    stackClass obj1; 
    for (int count = 0; count < 5; count++) { 
    obj1.set(rand()%20, rand()%20); 
    } 
    obj1.print(); 

return 0; 
} 

答えて

0

コードにはいくつか問題があります。まず、あなたのset関数は何もしていません。関数のパラメータに値を割り当てています。代わりにacross=iacross;をやることを意味しましたか(ivertも同様)

次に、あなたのコンストラクタは、どちらかは何も有効ではありません。ローカル配列を作成して初期化しますが、その関数がローカル配列をオーバーするとすぐには消えてしまいます。

この場合、print関数は新しいローカル配列を作成し、初期化せずにそこから値を読み取ります。だから、メモリからジャンクを印刷するだけです。

私が正しく理解していれば、これはあなたが何をしたいです。あなたはプライベートメンバーthe_arrayがあり、それを使いたいと思っています。まず、それはconstであってはならず、staticではないはずです(あなたが静的にした理由はわかりませんが、それはあなた次第です)。次に、あなたのコンストラクタで、コードの残りの部分は、あなたのメンバーthe_arrayの値を初期化します途中ライン

bool the_array[index_one][index_two]; 

を取り除きます。また、あなたの印刷機能では、同じ行を取り除いて、メンバ配列から読み込むことができます。

the_array[iacross][ivert] = true; 

何もない:最後に、あなたのset機能では、私の最高の推測では、これはあなたが何をしたいのかです。

+0

ありがとうございます。これですべてがわかります。本当にありがとう! – Badlittlepiggy

0

the_arrayをメンバ変数にしたい場合は、staticキーワードを付けずに宣言する必要があります。 @grigorが述べたように

ある

、あなたのコードは、いくつかのエラーを持って、他にstack.h

bool the_array[index_one][index_two];

const static bool the_array[index_one][index_two];

置き換える本当にないかもしれません期待どおりにうまくいった。

関連する問題