c++ - 为什么包括与RTCZero库不兼容?

标签 c++ c struct compiler-errors arduino

长话短说,一段时间后,我正在使用RTCZero库创建警报以唤醒我的arduino,但我确定,当我添加更多的传感器和更多的库时,RTC库与它们不兼容。我以为是包括我在内的原因,但问题仍然存在。有什么办法吗?

!!!编辑!!!

更准确地说,我发现有问题的库仅仅是这些:在这里您可以下载整个库(此脚本中的包含内容)。 https://github.com/charles-the-forth/openCanSat-library

#include <Adafruit_BME280.h> 
#include <Adafruit_INA219.h>
#include "Open_Cansat_GPS.h"
#include "RFM69.h"

这里包括
#include <Adafruit_BME280.h>  // include Adafruit BME280 library
#include <Adafruit_INA219.h>  // include INA219
#include <SD.h>          // include Arduino SD library
#include "Open_Cansat_GPS.h"

//include our new sensors
#include <MICS6814.h>
#include <MICS-VZ-89TE.h>
#include "MQ131.h"
#include <Wire.h>

#include "RFM69.h"       // include RFM69 library
#include <SPI.h>
#include <RTCZero.h>

这是错误
Arduino: 1.8.10 (Windows 10), Vývojová deska: "Arduino M0"

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp: In member function 'uint32_t RTCZero::getEpoch()':

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:379:13: error: aggregate 'RTCZero::getEpoch()::tm tm' has incomplete type and cannot be defined

   struct tm tm;

             ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:391:10: error: 'mktime' was not declared in this scope

   return mktime(&tm);

          ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:391:10: note: suggested alternative: 'mktemp'

   return mktime(&tm);

          ^~~~~~

          mktemp

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp: In member function 'void RTCZero::setAlarmEpoch(uint32_t)':

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:22: error: 'gmtime' was not declared in this scope

     struct tm* tmp = gmtime(&t);

                      ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:22: note: suggested alternative: 'setTime'

     struct tm* tmp = gmtime(&t);

                      ^~~~~~

                      setTime

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:409:21: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmDate(tmp->tm_mday, tmp->tm_mon + 1, tmp->tm_year - EPOCH_TIME_YEAR_OFF);

                     ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:409:23: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmDate(tmp->tm_mday, tmp->tm_mon + 1, tmp->tm_year - EPOCH_TIME_YEAR_OFF);

                       ^~~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:409:35: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmDate(tmp->tm_mday, tmp->tm_mon + 1, tmp->tm_year - EPOCH_TIME_YEAR_OFF);

                                   ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:409:37: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmDate(tmp->tm_mday, tmp->tm_mon + 1, tmp->tm_year - EPOCH_TIME_YEAR_OFF);

                                     ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:409:52: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmDate(tmp->tm_mday, tmp->tm_mon + 1, tmp->tm_year - EPOCH_TIME_YEAR_OFF);

                                                    ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:409:54: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmDate(tmp->tm_mday, tmp->tm_mon + 1, tmp->tm_year - EPOCH_TIME_YEAR_OFF);

                                                      ^~~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:410:21: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmTime(tmp->tm_hour, tmp->tm_min, tmp->tm_sec);

                     ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:410:23: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmTime(tmp->tm_hour, tmp->tm_min, tmp->tm_sec);

                       ^~~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:410:35: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmTime(tmp->tm_hour, tmp->tm_min, tmp->tm_sec);

                                   ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:410:37: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmTime(tmp->tm_hour, tmp->tm_min, tmp->tm_sec);

                                     ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:410:48: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmTime(tmp->tm_hour, tmp->tm_min, tmp->tm_sec);

                                                ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:410:50: error: invalid use of incomplete type 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     setAlarmTime(tmp->tm_hour, tmp->tm_min, tmp->tm_sec);

                                                  ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:407:12: note: forward declaration of 'struct RTCZero::setAlarmEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp: In member function 'void RTCZero::setEpoch(uint32_t)':

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:22: error: 'gmtime' was not declared in this scope

     struct tm* tmp = gmtime(&t);

                      ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:22: note: suggested alternative: 'setTime'

     struct tm* tmp = gmtime(&t);

                      ^~~~~~

                      setTime

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:426:29: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.YEAR = tmp->tm_year - EPOCH_TIME_YEAR_OFF;

                             ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:426:31: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.YEAR = tmp->tm_year - EPOCH_TIME_YEAR_OFF;

                               ^~~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:427:30: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.MONTH = tmp->tm_mon + 1;

                              ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:427:32: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.MONTH = tmp->tm_mon + 1;

                                ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:428:28: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.DAY = tmp->tm_mday;

                            ^~

Byly nalezené násobné knihovny "Wire.h"
 Použitý: C:\Users\Marty\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.4\libraries\Wire
Byly nalezené násobné knihovny "SD.h"
 Použitý: C:\Users\Marty\Documents\Arduino\libraries\SD
 Nepoužitý: C:\Program
C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

Byly nalezené násobné knihovny "MICS6814.h"
     struct tm* tmp = gmtime(&t);

 Použitý: C:\Users\Marty\Documents\Arduino\libraries\arduino-mics-6814-master
            ^~

Byly nalezené násobné knihovny "MICS-VZ-89TE.h"
C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:428:30: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

 Použitý: C:\Users\Marty\Documents\Arduino\libraries\MICS-VZ-89TE-master
Byly nalezené násobné knihovny "MQ131.h"
     clockTime.bit.DAY = tmp->tm_mday;

 Použitý: C:\Users\Marty\Documents\Arduino\libraries\mq131
                              ^~~~~~~

 Nepoužitý: C:\Users\Marty\Documents\Arduino\libraries\ozone
 Nepoužitý: C:\Users\Marty\Documents\Arduino\libraries\hjj
Byly nalezené násobné knihovny "SPI.h"
 Použitý: C:\Users\Marty\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.4\libraries\SPI
C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

Byly nalezené násobné knihovny "RTCZero.h"
C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:429:29: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

 Použitý: C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master
     clockTime.bit.HOUR = tmp->tm_hour;

                             ^~

Byly nalezené násobné knihovny "Adafruit_BME280.h"
 Použitý: C:\Users\Marty\Documents\Arduino\libraries\openCanSat-2.0-library-master
C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:429:31: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.HOUR = tmp->tm_hour;

                               ^~~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:430:31: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.MINUTE = tmp->tm_min;

                               ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:430:33: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.MINUTE = tmp->tm_min;

                                 ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:431:31: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.SECOND = tmp->tm_sec;

                               ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:431:33: error: invalid use of incomplete type 'struct RTCZero::setEpoch(uint32_t)::tm'

     clockTime.bit.SECOND = tmp->tm_sec;

                                 ^~~~~~

C:\Users\Marty\Documents\Arduino\libraries\RTCZero-master\src\RTCZero.cpp:422:12: note: forward declaration of 'struct RTCZero::setEpoch(uint32_t)::tm'

     struct tm* tmp = gmtime(&t);

            ^~

exit status 1
Nastala chyba při kompilaci u desky Arduino M0.

Táto zpráva by měla mít víc informacií v
"Zobrazení podrobného výstupu při kompilaci"
podle zapnuté volby v Soubor -> Nastavení.

最佳答案

RTCZero.cpp中,您可以看到#include <time.h>,它是标准 header ,并且库依赖它。

在链接库(openCanSat)中,您可以看到Time.h和Time.cpp,这是一些时间函数的自定义实现,并且与标准time.h完全不兼容。但是,由于Arduino IDE是一个虚拟IDE,因此Time.h优先于time.h(在区分大小写的文件系统的OS(Linux,osx等)上不会发生这种情况)。因此,您可以在库中重命名Time.h,也可以尝试将#include <time.h>更改为#include <ctime>,但这也可能包括time.h,所以...

关于c++ - 为什么包括与RTCZero库不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60493372/

相关文章:

iOS:将结构作为参数传递

c++ - 如何在 http_request 中发送 JSON 对象以及如何在服务器上访问它?

c++ - C/C++ 中的跨平台自定义文件头

c - 如何跟踪某个循环的运行量并将值存储到数组中

C - (malloc、calloc 或静态)从函数返回的二维字符数组

计算夏令时开始和结束的日期和时间?

c - 堆内存 : Gap of 16 bytes for 8 byte struct

对象和指针的 C++ vector

c++ - OpenSceneGraph - 如何添加一堵墙或三堵墙

c++ - 理解CHIP8仿真器中的一段代码