我已经开始为Arduino学习C++,遇到了一些麻烦。我有一些读/写SPIFFS文件的功能。由于打开配置文件的代码很常见,我希望有一个单独的功能来处理它
我提出了以下功能声明
ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File *file);
该函数接受指向文件路径的char数组的指针,以及指向打开的文件的指针。然后我试着做下面的函数定义
ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File *file)
{
if (SPIFFS.exists(path))
{
file = &SPIFFS.open(path, "r+");
return !file ? Failed : Opened;
}
else
{
file = &SPIFFS.open(path, "w+");
return !file ? Failed : Created;
}
}
这不起作用,因为编译器抱怨错误错误:获取临时[-fpermission]的地址。据我所知,这意味着一旦DeviceOpenConfigFile函数返回,文件对象将被处理?
所以我的问题是,是否可以实现一个函数,使我可以获得File对象引用并在以后发布它?
SPIFFS.open
显然按值返回File
。返回的值将是该行中可用的临时变量。因此,取那个人的地址没有任何意义,原因与int func (void); ... &func()
没有任何意义相同。它与周围的DeviceOpenConfigFile
函数无关- 为参数传递的指针分配新地址是没有意义的,原因与
void func (int x) { x = 0; }
没有意义相同——您只更改局部变量,调用方不会更改任何内容,也不会向调用方返回任何内容
看起来您正在寻找的解决方案是:
ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File* file)
{
...
*file = SPIFFS.open(path, "r+");
其中CCD_ 6被分配在主叫侧。