Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 16.12.15 Prihlásený: 11.03.22 Príspevky: 21 Témy: 9 | 9 |
Nevedel som ako tému nazvať, ale mal som hlavičkový súbor kde som mal aj definície funkcií už rovno v triede. Vo funkciách som používal aj globálne premenné. No potom som spravil cpp súbor a oddelil všetky definície funkcií od deklarácie a v tom začali problémy. Musel som do *.h súboru nahádzať veľa #include a globálne premenné už nebralo. Vie mi to niekto vysvetliť prečo to tak je? Tu je príklad keby niekto nechápal: Priklad s *.h trieda.h Kód: #ifndef TRIEDA_H_ #define TRIEDA_H_ class TR { // pouzitie globalnych premennych }; #endif TRIEDA_H_
main.cpp Kód: #include <iostrem> // globalne premenne #include "trieda.h" // kod.. --------------------------------------------- Priklad s *.h a *.cpp trieda.h Kód: #ifndef TRIEDA_H_ #define TRIEDA_H_ #include <iostream> // uz musim napisat, inak mi kod v kode nebude fungovat std::cout a atd.. #include "globalne.h" // musim napisat inak gloablne objekty a funkcie nezobere class TR { // pouzitie globalnych premennych z globalne.h }; #endif TRIEDA_H_
trieda.cpp Kód: #include "trieda.h" // definicie main.cpp Kód: #include <iostrem> #include "globalne.h" #include "trieda.h" // kod..
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Include je direktiva preprocesoru, ktorá hovorí "zober tento súbor a plácni jeho obsah sem". Takže musíš brať ohľad na poradie, napr: Kód: #include <iostream> #include <trieda.h>
int globalnaPremenna = 1;
Premenná globalnaPremenna je definovaná až po triede, takže samotná trieda ju nepozná. Keď ale napíšem: Kód: #include <iostream>
int globalnaPremenna = 1;
#include <trieda.h>
tak to síce vyzerá blbo, ale bude to fungovať. Takže v tvojom prípade stačí globalne funkcie inkludovať raz a to na začiatku main.cpp súboru (pred triedami, ktoré tieto funkcie používajú)
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 16.12.15 Prihlásený: 11.03.22 Príspevky: 21 Témy: 9 | 9 |
To mi je jasné, aj mi to tak funguje. Ale len potiaľ, pokiaľ nerozdelím .h súbor na deklaráciu .h a definíciu .cpp. Potom všetko čo mám #include pred triedou.h musím ešte raz napísať do triedy.h ak používam globálne premenné, alebo z knižnice ktorá je už raz vsunutá. To bola tá hlavná otázka, prečo hlavičkový súbor už ignoruje vložené hlavičkové súbory v main.cpp pri rozdelení na deklaráciu a definíciu.
Inak používam VS 2015 CE
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Aha takto, tak to je preto, že cpp súbory sa kompilujú zvlášť a potom sa len "spájajú" pomocou linkera do jedného programu. Takže na cpp súbory sa musíš pozerať ako na "samostatné programy" - v podstate.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 16.12.15 Prihlásený: 11.03.22 Príspevky: 21 Témy: 9 | 9 |
Hmm, potom je tu otázka, nie sú potom tie objekty, ktoré sú v hlavičkových súboroch deklarované viackrát? Čo viem ja, tak by mali byť deklarované iba raz, keďže sa tam robia opatrenia pomocou #ifndef a #define. Na druhej strane, som si myslel, že deklaračný cpp súbor sa "prepojí" s main.cpp cez hlavičkový súbor - mám na mysli, že hlavičkový súbor čerpá z main.cpp ak je tam vložený, tak deklaračný cpp súbor bude prepojený cez hlavičkový súbor kde sú definície, s main.cpp.
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Ako píšem, cpp súbory sa kompiluju osobitne - skompiluju znamená, že sa preložia do strojového kódu a tam už predsa žiadne definície neexistujú.
Definície tried existujú len na úrovni jazyka C++, v strojovom kóde už nič také nie je. A na úrovni C++ používaš definície práve na to, aby to prekladač věděl správne preložiť, nastaviť správne identifikátory, adresy atď.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Antivíry a antispywary | 14 | 1428 | 21.11.2010 16:45 idaho | | v TV | 0 | 1904 | 18.10.2010 12:30 quatermain | | v Assembler, C, C++, Pascal, Java | 4 | 1039 | 12.11.2010 13:40 mack0 | | v Assembler, C, C++, Pascal, Java | 1 | 424 | 20.03.2015 22:36 walther | | v Assembler, C, C++, Pascal, Java | 20 | 1871 | 12.02.2011 0:12 The | | v Ponuka práce | 0 | 1544 | 23.10.2006 21:30 tomko | | v Operačné systémy Microsoft | 19 | 1169 | 11.02.2009 13:25 fanthomas | | v Assembler, C, C++, Pascal, Java | 9 | 659 | 16.01.2013 22:51 Eddy | | v Assembler, C, C++, Pascal, Java | 5 | 606 | 10.11.2016 15:44 gamerKo | | v Assembler, C, C++, Pascal, Java | 6 | 2271 | 25.06.2011 23:56 street_punk | | v Kôš | 1 | 162 | 30.03.2016 15:17 brmbo | | v Assembler, C, C++, Pascal, Java | 2 | 487 | 02.02.2016 14:31 void | | v Perl, Python, Ruby, CGI | 13 | 1853 | 25.06.2013 19:58 phodinux | | v Assembler, C, C++, Pascal, Java | 7 | 593 | 02.11.2012 18:47 MasterMatoSK | | v Technológia .NET | 1 | 588 | 07.03.2014 21:42 walther | | v Assembler, C, C++, Pascal, Java | 23 | 2742 | 27.11.2009 19:22 _FleXoR_ |
|