如何通过函数在C++中设置私有静态数组

How do I set a private static array in C++ via a function?

本文关键字:静态 数组 设置 何通过 函数 C++      更新时间:2023-10-16

我有一个类,作为成员,它包含一个大数组。

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.读取的值

我做错了什么?如何告诉类使用我提供的函数修改静态成员?

在数组上使用运算符sizeof()并不总是按照您预期的方式行事。根据上下文的不同,数组可以被解释为一个指针,如下所述。

我认为你实际上想做的是将fread改为:

size_t numread = fread(somearray, sizeof(int), 1000, fin);

我认为fread是作为一个字符从流中读取的(我的猜测),所以尝试将somearray更改为static char somearray[1000],我认为它会在中工作

注意:fread甚至将"\0"读取为单个字符