如何解决从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;
}
}
那没有用,因为编译器抱怨错误错误:接收临时[-fpermissive] 的地址 据我了解,这意味着一旦DeviceOpenConfigFile函数返回,文件对象将被处置?
所以我的问题是,是否有可能以一种可以获得文件对象引用并在以后发布的方式来实现功能?
解决方法
-
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+");
其中file
被分配在呼叫方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。