Nejste přihlášen/a.
Zdravím, doufám že mi někdo dokáže poradit.
Potřebuji v Arduini IDE napsat nějakým jednodušším způsobem deklarovat pole proměnných s velikostí nastavitelnou v main, přičemž proměnná je deklarována v knihovně. V main se nastavuje velikost pole (nikoli hodnota)
Stávající funkční řešení:
main.cpp:
extern const int POCET_ZARIZENI = 3;
extern int zarizeni_id[POCET_ZARIZENI]={};
extern byte zarizeni_kategorie[POCET_ZARIZENI]={};
void setup(){}
void loop(){}
knihovna.cpp:
extern const int POCET_HODNOT;
extern int zarizeni_id[];
extern byte zarizeni_kategorie[];
Ideálně bych potřeboval, abych v main "zarizeni_id" a "zarizeni_kategorie" deklarovat vůbec nemusel
Zdravím, v Arduinu jsem nedělal a nejsem ani profesionální programátor, ale všiml jsem si, že soubory mají koncovku cpp, tudíž mě napadlo, že asi používáte c++. Co to udělat přes třídu? Trochu jsem to pozměnil, abych věděl, jestli to bude fungovat. V main deklarujete jen POCET a potom ho nastavíte přes funkci z třídy.
knihovna.h
#ifndef KNIHOVNA_H
#define KNIHOVNA_H
#include
#include
#include
class Zarizeni {
public:
int *zarizeni_id;
void nastavPocet(int POCET);
void nastavHodnotu(int poradi, int hodnota);
};
#endif
knihovna.cpp
#include "knihovna.h"
Zarizeni zarizeni;
void Zarizeni::nastavPocet(int POCET) {
zarizeni_id = new int[POCET];
}
void Zarizeni::nastavHodnotu(int poradi, int hodnota) {
zarizeni_id[poradi] = hodnota;
}
main.cpp
#include "knihovna.h"
const int POCET = 3;
extern Zarizeni zarizeni;
int main() {
zarizeni.nastavPocet(POCET);
zarizeni.nastavHodnotu(0, 1);
zarizeni.nastavHodnotu(1, 2);
zarizeni.nastavHodnotu(2, 3);
for (int i = 0; i < POCET; i++) {
printf("%d
", zarizeni.zarizeni_id[i]);
}
delete[] zarizeni.zarizeni_id;
system("PAUSE");
return 0;
}
Ano, přes třídu by to zřejmě šlo realizovat a v konečném důsledku je to i vhodnější řešení, pokud bych zakládal projekt. Bohužel se ale jedná o už existující rozsáhlejší projekt se společnou knihovnou pro mnoho zařízení. Kvůli optimalizaci využití paměti (protože jsem se už tak blížil její maximální využitelné hranice) jsem už od začátku třídu nevyužíval.
Osobně jsem doufal, že můj problém by se například dal vyřešit ve fázi kompilace, pokud si totiž definuji hodnotu "POCET" v jiné knihovně, tak to pro kompilátor problém není. V součastnosti je to tak, že každé zařízení má jeden svůj vlastní textový soubor a všechny společně využívají další knihovny.
Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.
Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.