从C++函数返回对象引用



我已经开始为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被分配在主叫侧。

最新更新