| | |
| 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 |
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 | Napísal BX: 17.06.2017 9:21 | |
|
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 | Napísal autor témy Elendil: 17.06.2017 13:05 | |
|
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 | Napísal BX: 17.06.2017 16:01 | |
|
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 | Napísal autor témy Elendil: 17.06.2017 18:52 | |
|
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 | Napísal BX: 19.06.2017 21:16 | |
|
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 |
---|
| ESET definícia vírusov, alebo antivírus čo najmenej sťahuje v Antivíry a antispywary | 14 | 1383 | 21.11.2010 16:45 idaho | | Kabel Y/C na RGB alebo prevodnik alebo zapojenie SCART. v TV | 0 | 1852 | 18.10.2010 12:30 quatermain | | deklaracia pola - C v Assembler, C, C++, Pascal, Java | 4 | 999 | 12.11.2010 13:40 mack0 | | C# alebo C++ appka/program na výpočty v Assembler, C, C++, Pascal, Java | 1 | 386 | 20.03.2015 22:36 walther | | C# alebo C++ , ktore knizky na ucenie? v Assembler, C, C++, Pascal, Java | 20 | 1796 | 12.02.2011 0:12 The | | Hľadáme C/C++ alebo JAVA programátorov v Ponuka práce | 0 | 1499 | 23.10.2006 21:30 tomko | | Chybajuci alebo poskodeny subor - Windows Vista v Operačné systémy Microsoft | 19 | 1108 | 11.02.2009 13:25 fanthomas | | Testovanie konca riadku v textových súboroch (c++) v Assembler, C, C++, Pascal, Java | 9 | 610 | 16.01.2013 22:51 Eddy | | Kernel, OS, C alebo C++ v Assembler, C, C++, Pascal, Java | 5 | 560 | 10.11.2016 15:44 gamerKo | | C alebo C++ potrebujem poradiť :) v Assembler, C, C++, Pascal, Java | 6 | 2183 | 25.06.2011 23:56 street_punk | | Pascal alebo C,C++ v Assembler, C, C++, Pascal, Java | 2 | 454 | 02.02.2016 14:31 void | | Python alebo c++ v Perl, Python, Ruby, CGI | 13 | 1802 | 25.06.2013 19:58 phodinux | | C - Ako prekompilovať .c súbor do .exe? v Assembler, C, C++, Pascal, Java | 7 | 556 | 02.11.2012 18:47 MasterMatoSK | | Kniha C# alebo Visual Basic v Technológia .NET | 1 | 528 | 07.03.2014 21:42 walther | | C++ zaciatocnik... alebo nieco ine? v Assembler, C, C++, Pascal, Java | 23 | 2672 | 27.11.2009 19:22 _FleXoR_ | | učebnica C P. Herout alebo iná v Assembler, C, C++, Pascal, Java | 2 | 381 | 08.11.2012 7:29 Fico |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|