从 C++ 函数返回对象引用
Returning object reference from C++ function
我已经开始为 Arduino 学习 C++,但 运行 遇到了一些麻烦。
我有一些函数 reading/writing 到 SPIFFS 文件。
由于打开配置文件的代码很常见,我希望有一个单独的函数来处理它。
我想出了以下函数声明
ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File *file);
该函数接受指向文件路径的字符数组指针和指向已打开文件的指针。
然后我尝试进行以下函数定义
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 函数 returns?
后被处理
所以我的问题是是否有可能以我可以获得文件对象引用并稍后释放它的方式实现功能?
SPIFFS.open
显然 returns 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
分配在 caller-side 上。
我已经开始为 Arduino 学习 C++,但 运行 遇到了一些麻烦。 我有一些函数 reading/writing 到 SPIFFS 文件。 由于打开配置文件的代码很常见,我希望有一个单独的函数来处理它。
我想出了以下函数声明
ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File *file);
该函数接受指向文件路径的字符数组指针和指向已打开文件的指针。 然后我尝试进行以下函数定义
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 函数 returns?
后被处理所以我的问题是是否有可能以我可以获得文件对象引用并稍后释放它的方式实现功能?
SPIFFS.open
显然 returnsFile
,按值。返回值将是该行上可用的临时变量。所以获取那个地址没有任何意义,因为int func (void); ... &func()
没有任何意义。与周围的DeviceOpenConfigFile
函数无关- 为参数传递的指针分配新地址没有意义,原因与
void func (int x) { x = 0; }
没有意义相同 - 您仅更改局部变量,调用方没有任何变化得到改变,没有任何东西返回给调用者。
看来您正在寻找的解决方案是这样的:
ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File* file)
{
...
*file = SPIFFS.open(path, "r+");
其中 file
分配在 caller-side 上。