c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Programovacie jazyky, rady, poradňa...
Oblak
Light Expert
Light Expert
Príspevky: 60
Registrovaný: 27 máj 2015, 15:40

c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa Oblak »

Mám niekoľko otázok:

ak mám program rozdelený na viacero súborov a to tak,
subor.h
subor-konstrct.cpp
subor-private.cpp
subor-public.cpp
source.cpp

v súbor.h mám triedu v mennom priestore a v ostatných mám vypísané funkcie danej triedy ( - to že je trieda v mennom priestore, menný priestor som spravil len na skúšku, ten menný priestor je tam inak zbytočný).

1. Je všetko v poriadku ak v každom súbore *.cpp mám iba zahrnuté
#include "subor.h"
a nič viac? Je komunikácia triedy v poriadku - ak je to takto rozdelené do súborov, alebo treba to ešte nejak ošetriť, aby kód správne pracoval pri takto rozdelení súborov? Upozorňujem, že pracujem len s triedou, nič viac. To znamená že volám len funkcie triedy a vo funkciách pracujem s objektmi ktoré sú v triede.

2. Takto ako to mám teraz, som si písal kód, uvediem príklad

Kód: Vybrať všetko

// pseudo kod
void mennypriestor::Trieda::funkcia1()
{
	std::cout << "-- funkcia1()\n";	// -> vypisalo (ked som dodal pre skontrolovanie ci vobec bere funkciu)
	while (bool podmienka && i < V)	// -> nespravilo ako keby neexistovalo
	{
		// kod...
	}
	std::cout << "-- Koniec funkcia1()\n"; // -> vypisalo
}

void mennypriestor::Trieda::funkcia2()
{
	// tuto funkciu som napisal ako prvu
	// kod.. fungoval od zaciatku bez problemov
	// obsah funkcie2() som dopisal po dopisani tohoto kodu
}
Problém nastal, keď som napísal kód pre funkciu 2 a kód nefungoval. Podmienka while ako keby neexistovala. Ak som ju prepísal do

Kód: Vybrať všetko

do{
	std::cout << "vypis"; // vypisalo iba raz potom cyklus skoncil
	// kod.. // -> ignorovalo, ako keby prelozilo len urcite zmeny a to - do while a std::cout.
} while (i < V);
Po nejakých zmenách, ktoré boli drobné, kód ako keby začal fungovať. Tak ma napadlo, či to nesúvisí s kompiláciou - teda že keď som dopísal kód neskôr či ho vôbec skompilovalo? Nevyznám sa v tom, možno sa vyjadrujem v tomto zle, ale hádam ma pochopíte čo tým myslím.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa harrison314 »

Pri kompilacnej chybe by ti to neskompilovalo a nespustilo.

Aku chybu ti vypisal kompilator?
Oblak
Light Expert
Light Expert
Príspevky: 60
Registrovaný: 27 máj 2015, 15:40

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa Oblak »

žiadnu. Nie je tam žiadna "pravopisná" chyba, ani nejaká závažná logická chyba, ak tam vždy nastane chyba ktorú kompilátor vypíše, tak vždy najprv opravím kód aby sa skompiloval správne.
Nakoniec som zistil, do určitej miery čo to spôsobovalo. Keďže V je hodnota ktorá mohla byť aj 1, a cyklus začínal od hodnoty 0, tým pádom cyklus sa nespustil.

Už som sa pohol ďalej, ale zrejme tam bude viac takýchto logických chýb, pretože zisťujem nové chyby.

Ale ešte sem určite napíšem, lebo teraz mi vypisuje iné nezmysli (do konzoly = nie chyby), napr. ako keby mi spustilo iné funkcie ktoré by pôvodne nemalo.

Ešte chcem dodať, že keď hovorím o výpise, tak to čo sa mi vypíše na tú konzolu = vytváram konzolovú aplikáciu, čiže ak sa spustí funkcia, alebo nejaká podmienka, tak sa mi to vypíše do konzoly, aby som vedel či mi to funguje správne.

k tej prvej otázke (1.), čiže všetko je ok?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa harrison314 »

k otzake 1., musis includovat to co potrebujes, ak potrebujes iba triedu deklarovanu v "subor.h" tak ti to staci.
Oblak
Light Expert
Light Expert
Príspevky: 60
Registrovaný: 27 máj 2015, 15:40

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa Oblak »

Tak teraz naozaj musí ísť aj chybu prekladu alebo kompilácie. Nemyslím tým chybu, že niečo vypíše ale to, že neskompiluje časť kódu.

Uvediem četsvý príklad.
mám takýto kód:

Kód: Vybrať všetko

while (podmienky)
{
	// kod ..
	std::cout << i << endl;
	++i;
	if (i == V) {
		podmienka = false;
		i = 0;
	}
}
po správnosti ten cyklus by mal skončiť, ale neskončí, na konzole mi vypisovalo stále i = 0 a šlo to do nekonečna

po dodaní tohoto kódu:

Kód: Vybrať všetko

while (podmienky)
{
	// kod ..
	std::cout << i << endl;
	++i;
	if (i == V) {
		std::cout << "koniec cyklu" << endl; // dodany kus kodu
		podmienka = false;
		i = 0;
	}
}
zrazu cyklus pracoval správne, teda sa aj ukončil. Zaujímavé, naozaj to nemá nič spoločné s kompiláciou?
k otzake 1., musis includovat to co potrebujes, ak potrebujes iba triedu deklarovanu v "subor.h" tak ti to staci.
Vďaka.
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa Fabo »

Daj sem skutocny kod z toho co kompilujes, z pseudokodu toho clovek nevycita co sa tam deje a kde to moze realne blbnut.
Oblak
Light Expert
Light Expert
Príspevky: 60
Registrovaný: 27 máj 2015, 15:40

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa Oblak »

Moje nervy, ako som chcel dať kód na ukážku, som objavil chybu. Nemal som v if totiž zátvorky . V pseudo kóde ich mám ale v mojom nie.

EDIT: takže kompilácia prebiehala v poriadku, len kvôli tomu, že tam tie zátvorky neboli som myslel že mi no to celé blbne.
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa Fabo »

No vidis, a presne preto treba davat realny kod :D
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: c++ namespace, trieda, oddeleny preklad a kompilacia - ?

Príspevok od používateľa harrison314 »

Preto je dobre si zapnut extra warningy a kodit bez chyb aj varovani.
Napísať odpoveď