Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 6 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.12.15
Prihlásený: 11.03.22
Príspevky: 21
Témy: 9
Príspevok NapísalOffline : 16.06.2017 18:27

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..


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.12.15
Prihlásený: 11.03.22
Príspevky: 21
Témy: 9
Príspevok Napísal autor témyOffline : 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


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.12.15
Prihlásený: 11.03.22
Príspevky: 21
Témy: 9
Príspevok Napísal autor témyOffline : 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.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 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!
Odpovedať na tému [ Príspevkov: 6 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. 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 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kabel Y/C na RGB alebo prevodnik alebo zapojenie SCART.

v TV

0

1852

18.10.2010 12:30

quatermain Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. deklaracia pola - C

v Assembler, C, C++, Pascal, Java

4

999

12.11.2010 13:40

mack0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C# alebo C++ appka/program na výpočty

v Assembler, C, C++, Pascal, Java

1

386

20.03.2015 22:36

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C# alebo C++ , ktore knizky na ucenie?

v Assembler, C, C++, Pascal, Java

20

1796

12.02.2011 0:12

The Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hľadáme C/C++ alebo JAVA programátorov

v Ponuka práce

0

1499

23.10.2006 21:30

tomko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Chybajuci alebo poskodeny subor - Windows Vista

v Operačné systémy Microsoft

19

1108

11.02.2009 13:25

fanthomas Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Testovanie konca riadku v textových súboroch (c++)

v Assembler, C, C++, Pascal, Java

9

610

16.01.2013 22:51

Eddy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kernel, OS, C alebo C++

v Assembler, C, C++, Pascal, Java

5

560

10.11.2016 15:44

gamerKo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C alebo C++ potrebujem poradiť :)

v Assembler, C, C++, Pascal, Java

6

2183

25.06.2011 23:56

street_punk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pascal alebo C,C++

v Assembler, C, C++, Pascal, Java

2

454

02.02.2016 14:31

void Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Python alebo c++

v Perl, Python, Ruby, CGI

13

1802

25.06.2013 19:58

phodinux Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C - Ako prekompilovať .c súbor do .exe?

v Assembler, C, C++, Pascal, Java

7

556

02.11.2012 18:47

MasterMatoSK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kniha C# alebo Visual Basic

v Technológia .NET

1

528

07.03.2014 21:42

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ zaciatocnik... alebo nieco ine?

v Assembler, C, C++, Pascal, Java

23

2672

27.11.2009 19:22

_FleXoR_ Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. učebnica C P. Herout alebo iná

v Assembler, C, C++, Pascal, Java

2

381

08.11.2012 7:29

Fico Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra