Děláte někdo v C++ ? Dotaz Singleton

Píšete prosím někdo v C++ pro ARM ? Narážím na problém, kdy mám aplikaci v JAVA a potřebuji jí přepsat do C++, neboť JAVA pro daný typ ARM je nedostupná.
S C++ začínám a tak sháním nějaké rady kolem Singletonu. Jde mi o to, že pokud mám main() a ten singleton() v jednom souboru, tak je vše OK, ale pokud dám main() do souboru main.cpp, přidám tam include na singleton.hpp a ten singleton dám do souboru singleton.cpp, tak mi při překladu kompilátor zahlásí neznámou referenci. V JAVA je jedno, kde si nadeklaruju proměnnou, ale v C++ tak nelze. Chtěl bych v main() udělat toto:
Singleton isin; //definice isin typu Singleton
isin=Singleton.getInstance(); //vytvoření odkazu
a dále v main se odkazovat na metody a proměnné způsobem isin.promenna=xxx;
isin.delejNeco();
tak jak je to v JAVA. Je to prosím možné?
Pokud ano, můžete prosím někdo poradit ?
Díky
Jirka

U PICů v HI-TECH musím mít uvedenej hlavičkovej soubor

#include "něco.h"

Ale nevím, jestli je to stejné u ARMů

V main.cpp i v Singleton.cpp mám inkludovanej Singleton.hpp.
Podle mně je to v podstatě jedno, zda je to ARM nebo PIC nebo x86, mělo by to být obecně v C++ stejné.
Mohl bych prosím otravovati soukromě zasláním krátkých zdrojáků na skouknutí ?
Jirka

Řešte to prosím veřejně, ať z toho mají něco i ostatní.

Rád bych to řešil veřejně, ale už není další člověk, co by dal návrh. Zdrojáky jsem soukromě nezasílal.
A tak si musím pomoci sám. Metodou omylů a pokusů jsem to vyřešil. Pokud to někoho zajímá, tak ať se ozve, mohu to sem nakopírovat.
Jirka

Ono totiž spojení ARM + Java je takové dost … neobvyklé a málo přitažlivé.

To záleží na typu ARMu. Mobilní telefony a PDA jsou plné ARMů a běhá na nich JavaME. Některé procesory, třeba ARM926EJ-S jsou vybaveny technologií Jazelle, která umožňuje hardwarově provádět Java bytekód. U pamětí méně vybavených Cortex-M3 a u Cortex-M0 je použití Javy sporné, ale zase existují věci typu simpleRTJ.

Máš pravdu, je to jedno.
Dle mého názoru by měla mít každá unita 2 soubory s příponou *.cpp a *.h nebo *.hpp. Procedůru nebo strukturu, kterou chceš zveřejnit (aby byla viditelná v jiné unitě) definuješ v *.cpp a v hlavičkovém souboru *.h a zveřejníš ji pomoci direktivy extern. Např. do Singleton.cpp zapíšeš: int Soucet(int a, int b) { return a+b; }
a do hlavičkvého souboru Singleton.hpp zapíšeš

 extern int Soucet(int a, int b);

Hlavičkový soubor naincluduješ do Main.cpp pomocí direktivy include.
Některá vývojová prostředí umí tyto veci sami zpracovávat, takže se o ně nemusíme starat. Stačí jen přidat unitu do projektu a ostatní se zařídí samo.

Netuším sice co je singleton, ale wiki tvrdí, že je to třída, jíž je v programu pouze jediná instance a to po celou dobu běhu programu. V takovém případě není třída nutná a zvládne to obyčejný programový modul v C (a s tím už tu dokáže poradit každý druhý, globální proměnné patřící pouze danému modulu je nutné označit “static”). Jen už se pak volají funkce klasicky jejich jménem, nikoli přes instance.Metoda(). C++ by bylo potřeba teprve v případě potřeby přetěžování funkcí anebo vytváření a rušení instancí tříd. Jde-li pouze o jakýsi “zapouzdřený” přístup k funkcím, stačí na to z C++ jmenné prostory. Volání by pak vypadalo následovně: JmennyProstor::JmenoFunkce().

Proč se snažím vyhnout použití tříd? Mám velmi nepříjemný pocit, že jakmile bude v programu použita instanciace třídy, překladač do kódu nasype dynamickou alokaci a program bude v mžiku o nemálo kB větší. Další věcí je to, že všechny veřejné prvky z .c(pp) souboru musí být v .h(pp), tedy i deklarace třídy a jejích veřejných komponent) a to zatím neumím, neb mě k tomu zatím nic nedotlačilo :smiley:.

Pokud sem vložíš třídu z javy (od níž nebudou vytvářeny více než 1 instance, stačí bez výkonného kódu, jen deklarace funkcí a proměnných), určitě ji dokážem přepsat do C, v nejhorčím případě C++ se jmennými prostory.