ich zur Zeit die folgende Meldung erhalte:Nicht-Klasse Typ Fehler und Pointer gibt
Fehler erhalten von Arduino IDE: Anfrage Mitglied ‚EEPROMWriteAny‘ in ‚eType‘, die von Nicht-Klasse-Typ ' EEPROMAnyType() '
Ich glaube nicht, dass ich die Variablen durch Verweis richtig in meinem Code übergeben, da dies das Hauptproblem ist, das den oben beschriebenen Fehler verursacht. Oder hat EEPROMWriteAny und EEPROM ReadAny in einer Klasse einer Klasse, was diesen Fehler verursacht? Muss ich aus der EEPROMAnyType-Klasse zeigen und dann auf die U-Klasse zeigen? Ist EEPROMReadAny selbst in einer geschachtelten Klasse?
Ich habe die Header-Datei, cpp Quelldatei, Arduino Beispielcode mit der EEPROM-Bibliothek und wie ich die Schlüsselwörter der folgenden Klassen definiert. Ich habe auch ein Bild davon geliefert, wie meine Bibliothek in ihrem Ordner aussieht, falls da etwas nicht stimmt.
Headerdatei:
#ifndef EEPROMAnyType_h
#define EEPROMAnyType_h
#include <Arduino.h>
#include <EEPROM.h>
class EEPROMAnyType
{
public:
template <class U> int EEPROMReadAny(unsigned int addr, U& x); //Reads any type of variable EEPROM
template <class U> int EEPROMWriteAny(unsigned int addr, U& x);//Writes any type of variable to EEPROM
private:
int i;
const byte *p[];
byte *p[];
};
#endif
CPP-Datei:
#include "Arduino.h"
#include "EEPROM.h"
#include "EEPROMAnyType.h"
template <class U> int EEPROMAnyType::EEPROMReadAny(unsigned int addr, U x)
{
int i;
byte* p[sizeof(x)] = (byte*)(void*) x; //(void*) makes variable x "typeless" and then (byte*) casts the typeless variable as a byte type
for(i = 0; i < sizeof(x); i++){ // Why can I not declare i as an integer in the for loop?
p[i]= EEPROM.read(addr+i);
}
return i;
}
template <class U> int EEPROMAnyType::EEPROMWriteAny(unsigned int addr, U x)
{
int i = 0;
const byte* p[i] = (const byte*)(const void*) x;
for(i = 0; i < sizeof(x); i++){
EEPROM.write(addr+i, p[i]);
}
return i;
}
Arduino Code:
#include <Arduino.h>
#include <EEPROM.h>
#include <EEPROMAnyType.h>
EEPROMAnyType eType(); // used to call EEPROMAnyType which can write/read any kind of data type to/from EERPOM
int addr = 10; //memory location to be pass by value to EEPROMAnyType functions
String *p;// To pass by reference to EEPROMAnyType functions
String x; //will be assigned to EEPROM location
void setup() {
x = "memory";
p = &x;
Serial.begin(9600);
Serial.println("Hello World"); //shows start point of code
eType.EEPROMWriteAny(addr, *p); //Writes to EEPROM memory 10
x = eType.EEPROMReadAny(addr, *p); //assigns bytes from EEPROM memory location to x
}
void loop() {
Serial.print("x: ");
Serial.println(x);
Serial.print("no. of bytes stored in x: ");
Serial.println(EEPROMWriteAny(addr, p));
delay(1000);
}
Hier ist, wie ich die Schlüsselwörter für die Klasse EPPROMAnyType definiert:
'EEPROManyType eType();' sollte 'EEPROManyType eType;' sein, wenn Sie eine Instanz haben möchten. Andernfalls deklarieren Sie nur eine Funktion namens 'eType'. –