如何通过函数在C++中设置私有静态数组
How do I set a private static array in C++ via a function?
我有一个类,作为成员,它包含一个大数组。
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"读取为单个字符
相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- 动态分配的数组和静态数组之间的区别
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 使用 lambda 初始化静态数组
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- 根据模板值确定的静态数组大小
- 如何使用 PHP-CPP 在 PHP 类中添加静态数组
- 包含不同大小静态数组的类的多个实例
- 从我的对象返回静态数组
- 如何避免在类中显式指定静态数组的大小
- 编译类型的时静态数组
- 来自函数参数的 C++ 静态数组声明