У меня возникла проблема с передачей массива в функцию, которая содержится в библиотеке. Я использую Arduino IDE 16.7. Если я передаю переменную non-array/non-pointer, отличную от компиляции кода. Я думаю, что я сделал основной недостаток с моими адресами указателей. Но я не могу видеть, что этоОшибка компиляции при передаче массива/указателей в процедуру в библиотеке
Вот ошибки я получаю:
недействительным преобразование из «символ *» до «uint8_t {ака неподписанные символ}» [-fpermissive]
инициализирует аргумент 2 из 'пустого EEPROMClass :: записи (междунар, uint8_t)' [-fpermissive]
Обе эти ошибки связаны с EEPROM Arduino библиотеки я использую.
Компилятор, похоже, не согласен с моей передачей массива/указателя на библиотеку EEPROm, как это ... Почему?
H Файл:
#ifndef EEPROMAnyType_h
#define EEPROMAnyType_h
#include <Arduino.h>
#include <EEPROM.h>
template <class E>
class EEPROMAnyType
{
public:
int EEPROMReadAny(unsigned int addr, E x); //Reads any type of variable EEPROM
int EEPROMWriteAny(unsigned int addr, E x);//Writes any type of variable to EEPROM
// EEPROMAnyType(unsigned int addr, E x);
};
//#include "EEPROMAnyType.cpp"
#endif
CPP файл:
#include <Arduino.h>
#include <EEPROM.h>
#include "EEPROMAnyType.h"
template <class E>
int EEPROMAnyType<E>::EEPROMReadAny(unsigned int addr, E x)
{
union{
byte b[sizeof(x)];
E y;//generaltype y //have a variable that has no type here(using a tempplate???)
};
int i;
x = x; //assign x to y(a variable of no type) which should be n the union
y = x;
for(i = 0; i < sizeof(y); i++){ // Why can I not declare i as an integer in the for loop?
b[i] = EEPROM.read(addr+i);
}
return i;
}
template <class E>
int EEPROMAnyType<E>::EEPROMWriteAny(unsigned int addr, E x)
{
union{
byte b[sizeof(x)];
E y;//generaltype y //have a variable that has no type here(using a tempplate???)
};
int i = 0;
y = x;
for(i = 0; i < sizeof(y); i++){
EEPROM.write(addr+i, y);
}
return i;
}
INO файл (реализует библиотеку):
#include <Arduino.h>
#include <EEPROM.h>
#include <EEPROMAnyType.h>
#include <EEPROMAnyType.cpp>
int addressCharArray;
const int writes = 80;
const int memBase = 350;
unsigned int eeaddrPASS;
unsigned int eeaddrSSID;
char eePASS[writes];
char eeSSID[writes];
EEPROMAnyType<char*> eepblueString;//instantiates EEPROMANyType class
boolean check = false;
void setup(){
if (check = true){
EEPROMwifiUpdate(eeaddrPASS, eeaddrSSID, eePASS, eeSSID);
}
}
void loop(){
EEPROMwifiRead(eeaddrPASS, eeaddrSSID, eePASS, eeSSID);
}
void EEPROMwifiUpdate(unsigned int writeaddrPASS, unsigned int writeaddrSSID, char writePASS[writes], char writeSSID[writes]){
eepblueString.EEPROMWriteAny(writeaddrPASS, writePASS);
eepblueString.EEPROMWriteAny(writeaddrSSID, writeSSID);
}
void EEPROMwifiRead(unsigned int readaddrPASS, unsigned int readaddrSSID, char readPASS[writes], char readSSID[writes]){
eepblueString.EEPROMReadAny(readaddrPASS, readPASS);
eepblueString.EEPROMReadAny(readaddrSSID, readSSID);
}
велик, что устраняет эту проблему, но я получаю новую ошибку: недопустимое преобразование из «гольца * 'to' char '[-fpermissive] –
Также я получаю эту интересную ошибку, просто передавая тип String через: -' EEPROMAnyType :: EEPROMReadAny (unsigned int, E) [с E = String] :: <анонимный союз> :: ~ () 'неявно удаляется, поскольку определение по умолчанию будет плохо сформировано: union { –
Что d это означает? Могу ли я передать строковый тип? Что не так с конструктором destrcutor? Я знаю, что я не инициализировал один, но он должен быть инициализирован сам по себе, не так ли? –