2017-03-03 17 views
0

は私のようなクラス定義を持っている:問題は私のメインで発生した場合、これは今2次元配列をクラス変数として初期化する方法は?

#include "VideoSim.h" 



VideoSim::VideoSim(void) 
{ 

    currentRow = 0; 
    currentColumn = 0; 
    video[MAX_ROW][MAX_COLUMN] = { 0 }; 

} 

VideoSim::~VideoSim(void) 
{ 
    printf("Dead Video \n"); 
} 

void VideoSim::clearScreen(void) 
{ 

    int count = 0; 
    char *pVideo = video[count]; 

    for (count = 0; count < (MAX_ROW * MAX_COLUMN); count++) 
    { 
     *(pVideo++) = ' '; 
    } 

} 



int VideoSim::setCursorPosition(int newRow, int newColumn) 
{ 
    if (newRow >= 0 && newRow <= MAX_ROW && newColumn >= 0 && newColumn <= MAX_COLUMN) 
    { 
     currentColumn = newColumn; 
     currentRow = newRow; 
     return 0; 

    } 
    else 
    { 
     return 1; 
    } 


} 

#include <stdio.h> 
#pragma warning(disable:4996) 

#define MAX_ROW 10 
#define MAX_COLUMN 40 

class VideoSim 
{ 

private: 
    char video[MAX_ROW][MAX_COLUMN]; 
    int currentRow; 
    int currentColumn; 


public: 
    VideoSim::VideoSim(void); 
    VideoSim::~VideoSim(void); 
    void clearScreen(void); 
    int setCursorPosition(int row, int column); 


}; 

私もこれらのような方法が含まれている私の.cppファイルを持っています:

#include "VideoSim.h" 



int main(void) 
{ 

    VideoSim v; 
    return 0; 
} 

プログラムがvという名前VideoSimオブジェクトを作成しますが、その後...なぜこれが起こっている任意のアイデアをクラッシュ?

+0

配列 –

答えて

1

あなたの配列に0にすべての要素を初期化したい場合は、初期化子構文を使用する必要があります:あなたはvideo[MAX_ROW][MAX_COLUMN]にゼロを書き込むvideo[MAX_ROW][MAX_COLUMN] = { 0 };ラインで

VideoSim::VideoSim() 
    : video{} 
{ 
    currentRow = 0; 
    currentColumn = 0; 
} 

を範囲外のエラーです。

あなたはまた、クラス定義でのゼロ初期化を置くことができます:あなたは最終的にあなたがちょうど上記のコンストラクタ内の1つのような別の初期化を提供することによって、このデフォルトの初期化を上書きすることができ、カスタムのコンストラクタを追加した場合

char video[MAX_ROW][MAX_COLUMN]{}; 

+0

さて、私の間違い。ありがとう。 – ryyker

+0

このソリューションを使用する利点は、以下を使用することとは異なります。 memset(video、0、sizeof(video)); 私のコンストラクタで? –

+0

はい、これは明示的です。低レベルの関数を使用せず、関数を呼び出さないうちに高速化できます。また、コンパイラーは、ビルド・イン・タイプのデフォルト初期設定であるため、ゼロ初期化を最適化できます。 – Klaus

1

最も簡単な方法:

char video[MAX_ROW][MAX_COLUMN] = {{0}};//initialize all elements to NULL 
+0

のための 'のstd :: array'考えてみましょう、それはすでに私のクラス定義の中で、そのように宣言されている場合、なぜ私は前の文字を追加する必要がありますか? –

+0

このコードはクラス定義のためのものです。 – Klaus

+0

ああ、私がなぜ覚えていないのかは分かりませんが、クラス定義内のデータを初期化しないように教えられました。 –

0
VideoSim::VideoSim(void) 
{ 

    currentRow = 0; 
    currentColumn = 0; 
    memset(video,0, sizeof(video)); 

} 
関連する問題