Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 从C+返回对象引用+;功能 我开始学习ARDUNO的C++,遇到了一些麻烦。 我有一些读取/写入SPIFFS文件的函数。 由于打开配置文件的代码很常见,我希望有一个单独的函数来处理它_Arduino_Esp32_Arduino C++ - Fatal编程技术网

Arduino 从C+返回对象引用+;功能 我开始学习ARDUNO的C++,遇到了一些麻烦。 我有一些读取/写入SPIFFS文件的函数。 由于打开配置文件的代码很常见,我希望有一个单独的函数来处理它

Arduino 从C+返回对象引用+;功能 我开始学习ARDUNO的C++,遇到了一些麻烦。 我有一些读取/写入SPIFFS文件的函数。 由于打开配置文件的代码很常见,我希望有一个单独的函数来处理它,arduino,esp32,arduino-c++,Arduino,Esp32,Arduino C++,我提出了以下函数声明 ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File *file); 函数接受指向文件路径的字符数组指针和指向打开文件的指针。 然后,我尝试做以下函数定义 ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File *file) { if (SPIFFS.exists(path)) { file

我提出了以下函数声明

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;
    }
}
这不起作用,因为编译器抱怨错误错误:获取临时[-fppermissive]的地址 据我所知,这意味着一旦DevicePenConfigFile函数返回,文件对象将被释放

所以我的问题是,是否有可能实现一个函数,使我能够获取文件对象引用并在以后发布它?

  • SPIFFS.open
    显然会按值返回
    文件。返回值将是该行上可用的临时变量。因此,获取该函数的地址没有任何意义,原因与
    int func(void)&func()
    没有任何意义。它与周围的
    DeviceOpenConfigFile
    函数无关
  • 为参数传递的指针分配一个新地址没有意义,原因与
    void func(int x){x=0;}
    没有意义一样-您只更改一个局部变量,调用方没有任何更改,也没有任何内容返回给调用方
您正在寻找的解决方案似乎是:

ConfigFileOpenStatus DeviceOpenConfigFile(const char *path, File* file)
{
  ...
  *file = SPIFFS.open(path, "r+");

调用端分配了
file

SPIFFS.open
返回什么?FS:file类对象。使用Arduino学习C或微控制器是一个可怕的想法。首先,Arduino是C++,或者是它的一些方言。第二,所有的“让我做实际工作”库都不会让你真正学到任何东西。我建议使用裸机MCU,从头开始编写所有内容,即使这需要花费更多的时间。完全同意你@Lundin的观点,但现在我必须走这条路。这似乎可以完成任务!更确切地说,使用“代码>文件和文件< /代码>,因为这是C++。