[ Príspevkov: 6 ] 
AutorSpráva
Offline

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

Registrovaný: 16.12.15
Prihlásený: 30.09.17
Príspevky: 11
Témy: 5 | 5

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ý: 22.06.18
Príspevky: 1467
Témy: 2 | 2

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ý: 30.09.17
Príspevky: 11
Témy: 5 | 5

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ý: 22.06.18
Príspevky: 1467
Témy: 2 | 2

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ý: 30.09.17
Príspevky: 11
Témy: 5 | 5

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ý: 22.06.18
Príspevky: 1467
Témy: 2 | 2

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!
 [ Príspevkov: 6 ] 


C++ Hlavickovy subor vs Hlavickovy subor s CPP suborom (Alebo deklaracia a definicia tried v1 alebo 2och suboroch)



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

1158

21.11.2010 16:45

idaho

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

1414

18.10.2010 12:30

quatermain

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

deklaracia pola - C

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

4

814

12.11.2010 13:40

mack0

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

126

20.03.2015 22:36

walther

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

1488

12.02.2011 0:12

The

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

1245

23.10.2006 21:30

tomko

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

623

11.02.2009 13:25

fanthomas

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

Hľadám programátora C++ alebo C#

v Kôš

1

162

30.03.2016 15:17

brmbo

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

Kernel, OS, C alebo C++

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

5

266

10.11.2016 15:44

gamerKo

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

C alebo C++ potrebujem poradiť :)

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

6

1599

25.06.2011 23:56

street_punk

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

340

16.01.2013 22:51

Eddy

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

Pascal alebo C,C++

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

2

210

02.02.2016 14:31

void

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

Python alebo c++

v Perl, Python, Ruby, CGI

13

1121

25.06.2013 19:58

phodinux

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

253

02.11.2012 18:47

MasterMatoSK

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

Kniha C# alebo Visual Basic

v Technológia .NET

1

257

07.03.2014 21:42

walther

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

C++ zaciatocnik... alebo nieco ine?

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

23

2282

27.11.2009 19:22

_FleXoR_



© 2005 - 2018 PCforum, edited by JanoF