Hallo!
Ich habe folgendes Projekt das ziemlich Probleme macht, ich will eine Zentrale "Datenbank" als struct, habe das offizielle "struct" auch als extern deklariert, da es von diversen CPPs geändert/gelesen werden soll, leider klappt das nicht:
database.h
#pragma once
#ifndef DATABASE_H
#define DATABASE_H
#include <Arduino.h>
typedef struct module{
String moduleName;
int moduleChannels;
int moduleExtensions;
String moduleAddress;
String moduleIP;
String moduleVersion;
float module_battery;
int module_rssi;
} module;
typedef struct moduleDatabase{
module _module;
String moduleAddress;
int online;
unsigned long last_ping;
} moduleDatabase;
extern moduleDatabase database[24] = {};
#endif
main.cpp
#include <Arduino.h>
#include "main.h"
#include "database.h"
void parseMod(module mod)
{
}
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
test.cpp:
#include "test.h"
Test::Test(void)
{}
void Test::addModule(module mod)
{
}
test.h:
#ifndef TEST_H
#define TEST_H
#include "database.h"
class Test
{
Test(void);
void addModule(module mod);
};
#endif
Mein Compiler wirft mir folgende Fehlermeldung aus:
In file included from src/main.cpp:3:0:
src/database.h:26:34: warning: 'database' initialized and declared 'extern'
extern moduleDatabase database[24] = {};
^
In file included from src/test.h:3:0,
from src/test.cpp:1:
src/database.h:26:34: warning: 'database' initialized and declared 'extern'
extern moduleDatabase database[24] = {};
^
Linking .pio/build/esp32dev/firmware.elf
.pio/build/esp32dev/src/test.cpp.o:(.bss.database+0x0): multiple definition of `database'
.pio/build/esp32dev/src/main.cpp.o:(.bss.database+0x0): first defined here
collect2: error: ld returned 1 exit status
*** [.pio/build/esp32dev/firmware.elf] Error 1
entferne ich das "include" aus der "test.h" wird mein struct "module" in der Class nicht mehr erkannt.
Ich will aber über die Main und über die Test.cpp auf die "database" zugreifen, das geht ja nur wenn ich die "database.h" entsprechend include, aber darf das laut compiler nicht?
Vielleicht kann mir ja jemand helfen....
Grüße,
Daniel