メンバーとして大きな配列を含むクラスがあります。
exampleclass{
public:
...
static void set_array();
static int somearray[1000];
};
(配列は非公開にする必要がありますが、簡単で汚いテストの目的で公開に設定しました。以下を参照してください)
これで、配列は次のように初期化されます。
int exampleclass::somearray[1000];
これは、すべての値が 0 であることを意味します。これまでのところ、すべて問題ありません
ここで、次のように定義された関数でこれを初期化したいと思います。
void exampleclass::set_array()
{
memset(somearray, 0, sizeof(somearray));
FILE* fin= fopen("myfile.dat", "rb");
size_t bytesread= fread(somearray, sizeof(somearray), 1, fin);
fclose(fin);
}
これはすべてヘッダーファイルに含まれています
これを任意のクラスの外で使用すると (つまり、somearray[1000] はグローバル変数であり、上記の関数をメイン関数からグローバル関数として呼び出すと、すべてが魅力的に機能します。
しかし、メイン関数から次のことを行うと:
int main()
{
exampleclass::set_array();
for (int i=0; i<20; i++)
{
std::cout << exampleclass::somearray[i] << std::endl;
}
return 0;
}
私が得る出力は次のとおりです。
0
0
0
...
0
myfile.datから読み取った値を出力することを期待していますが。
私は何を間違っていますか?提供した関数で静的メンバーを変更するようにクラスに指示するにはどうすればよいですか?