Stejna promena ve vice hlavickovych souborech a zdrojovych – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Stejna promena ve vice hlavickovych souborech a zdrojovych – C / C++ – Fórum – Programujte.comStejna promena ve vice hlavickovych souborech a zdrojovych – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
cibule0
Návštěvník
18. 11. 2012   #1
-
0
-

Zdravim, resim takovou vec mam tri hlavickove soubory a tri zdrojove, v kazde bych chtel mit jednu promenou treba text

1 . hlavickovy soubor + 1.zdrojovy soubor

text = "neco 1"

2 . hlavickovy soubor + 2.zdrojovy soubor

text = "neco 2"

3 . hlavickovy soubor + 3.zdrojovy soubor

text = "neco 3"

Jde mi o to kdyz deklaruji hlavickovy soubor abych vypsal promenou text a nemusel psat text1,text2,text3  ale nedari se mi to prekladac mi furt pise chyby, Nevite jakym zpusobem by to slo zrealizovat?Pracuji v c, v c++ pomoci trid by to slo hned :-)

Dekuji za odpovedi

Nahlásit jako SPAM
IP: 85.70.207.–
vitamin+8
Grafoman
18. 11. 2012   #2
-
0
-

deklaruj globalnu premennu v .cpp subore ako staticku. 

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
cibule0
Návštěvník
18. 11. 2012   #3
-
0
-

#2 vitamin
ok a v hlavickovem nemusim nic definovat?

Nahlásit jako SPAM
IP: 85.70.207.–
vitamin+8
Grafoman
18. 11. 2012   #4
-
0
-

#3 cibule
V tvojom pripade nesmies.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
cibule0
Návštěvník
18. 11. 2012   #5
-
0
-

#4 vitamin
hm, kdyz deklaruji 1,2,3 cpp souboru static char * text, tak furt me to hlasi chybu

Nahlásit jako SPAM
IP: 85.70.207.–
KIIV
~ Moderátor
+43
God of flame
18. 11. 2012   #6
-
0
-

no me neni jasny o co se presne snazis... pokud chces mit jednu promennou mezi vicero zdrojakama (ktery se pak slinkujou do jedny binarky - to je ta dulezita cast) tak se pouziva klicove slovo external (a pak v jednom z cpp souboru musi byt ta promenna nadefinovana uz bez external)

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cibule0
Návštěvník
18. 11. 2012   #7
-
0
-

#6 KIIV
To te moc nechapu :-)

Ja proste potrebuju tohle:

// hlavicka1.h

void funkce();
extern char *text;

// zdroj1.cpp
char *text = "funkce1"
void funkce()
{
	//telo funkce
}

// hlavicka2.h

void funkce();
extern char *text;

// zdroj2.cpp
char *text = "funkce2"
void funkce()
{
	//telo funkce
}

// hlavicka3.h

void funkce();
extern char *text;

// zdroj3.cpp
char *text = "funkce3"
void funkce()
{
	//telo funkce
}

// main.cpp

#include "hlavicka1.h"

int main()
{
printf("Ted bezi %s",text);
}

Ale to deklarovani te promene text takhle nefunguje, ale zajimave je ze funkce mu nevadi ze jsou pojmenovane stejne

Nahlásit jako SPAM
IP: 85.70.207.–
vitamin+8
Grafoman
18. 11. 2012   #8
-
0
-

includoval si len "hlavicka1.h" (takze tam niesu zatial konflikty s linkovanim funkcii) a zabudol si dat bodkociarku za deklaraciou premennej  text :)

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV
~ Moderátor
+43
God of flame
18. 11. 2012   #9
-
0
-

nevadi protoze je zatim nepouzivas.. .jakmile se pokusis pouzit tak linker nema sanci poznat kterou pouzit

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
18. 11. 2012   #10
-
0
-

a spis by ted chtelo videt jak to budes linkovat...

jinak spis chapes spatne co si muzes a nemuzes dovolit

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cibule0
Návštěvník
18. 11. 2012   #11
-
0
-

#10 KIIV
Jak linkovat?

Nahlásit jako SPAM
IP: 85.70.207.–
KIIV
~ Moderátor
+43
God of flame
18. 11. 2012   #12
-
0
-

no postup jak z toho vytvaris *.o soubory a pak binarku...

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
18. 11. 2012   #13
-
0
-

Kazdy .cpp subor sa kompiluje zvlast (vecsinou do .o suboru). Nasledne tieto subory treba spojit (zlinkovat do jedneho), preto treba pri globalnych premennych udavat klucove slovo extern, aby linker vedel ze sa premenna nachadza v inom module. Akonahle je premenna deklarovana vo viacerych moduloch tak to linker nema sancu pospajat.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
cibule0
Návštěvník
18. 11. 2012   #14
-
0
-

#12 KIIV

ten postup dela kompilator ne? ja akorat zmacknu kompilace :-)

#13 vitamin

hm, ja jak mam projekt, tak tam mam main.cpp a pak ty (3 zdrojove soubory a 3 hlavickove)-> to jsem si vytvoril ja, takze chyba je ta ze linker kompliluje vsechny ty zdrojove soubory, proto tam vznika ta kolize s tou promenou text je to tak?

Nahlásit jako SPAM
IP: 85.70.207.–
vitamin+8
Grafoman
18. 11. 2012   #15
-
0
-

#14 cibule
Linker nekopiluje, kompilator kompiluje. Linker linkuje (spaja) uz skopilovane casti programu. 

Chyba je v tom ze nevies co robis. Kazda premenna alebo funkica musi byt v danom rozsahu platnosti jasne urcitelna a nesmie kolidovat z inou premennou/funkciou. U premennej to je jej meno, u funkcii je to meno + typy parametrov.

V tvojom pripade mas 3 globalne premenne s rovnakym menom a 3 funkcie s rovnakym menom. Vzhladom na to ze kompilator sa stara len o kompilaciu svojho modulu ( .cpp suboru) a jeho hlaviciek a nevie nic o ostatnych moduloch(.cpp suboroch), tak nevyhodi chybu, ale linker uz ma informacie aj o ostatnych moduloch, tym padom zisti kolizie.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV
~ Moderátor
+43
God of flame
18. 11. 2012   #16
-
0
-

a dokud tu funkci nepouzijes tak ti to nic hlasit nebude... jakmile ji ale pouzijes, tak i to bude hlasit chyby

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
18. 11. 2012   #17
-
0
-
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
cibule0
Návštěvník
18. 11. 2012   #18
-
0
-


Tak dekuju za objasneni, tak nakonec jsem to semolil pomoci direktiv :-)

Nahlásit jako SPAM
IP: 85.70.207.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý