[ dart_vejder @ 16.07.2005. 16:11 ] @
htio bih napraviti sljedece:

ima nekoliko f-ja, koje cesto koristim a ne postoje, cini mi se, kao gotove...
interesuje me da li trebam napraviti jedan *.h fajl, ili *.cpp fajl (ili koji??) , u kojem ce biti ispisane te f-je, i kasnije kad radim neki projekat samo upisem #include"funkcije.h" ili ako je .cpp u pitanju: #include"funkcije.cpp" (ide li poziv sa <> ili sa "" ???)
negdje sam cuo da se cak moraju kombinovati .h i .cpp???
moze li ko caskom napisati jedan od tih koji treba npr. za najosnovniju f-ju:

int saberi(int a,int b)
{
return a+b;
}

ili bar samo kretko da kaze sta, kako i gdje, pa cu ja sam sve provaliti, samo da me uputite...

e, da...i hoce li kasnije program napisan takvim f-jama raditi i kod drugih bez problema.... (vjerovatno glupo pitanje, ali se po prvi put susrecem sa pisanjem vlastitih heder fajlova...)
[ Burgos @ 16.07.2005. 16:46 ] @
U header fajl (saberi.h) moras napisati deklaraciju te funkcije

Code:
int saberi(int a,int b);


u source fajl (saberi.cpp) napises impementaciju funkcije

Code:

#include "saberi.h"

int saberi(int a,int b)
{
return a+b;
}


I koristis je na sledeci nacin:

Code:
#include <cstdio>
#include <iostream>
#include "saberi.h" //Navodnici idu ako se fajl nalazi u direktorijumu gde i ovaj fajl


int main()
{
    
    int sabirak = 0;
    
    sabirak = saberi(1,5);
    
 ::printf("%d\n", sabirak);
 
 system("PAUSE");
 return 0;   
}



[Ovu poruku je menjao Burgos dana 16.07.2005. u 17:47 GMT+1]

[Ovu poruku je menjao Burgos dana 16.07.2005. u 17:47 GMT+1]
[ Burgos @ 16.07.2005. 17:14 ] @
I, da radice bez problema kod drugih - linker ce da sve to poveze u jedan exe fajl.
[ X Files @ 16.07.2005. 17:26 ] @
Citat:

#include "saberi.h" //Navodnici idu ako se fajl nalazi u direktorijumu gde i ovaj fajl


Zapravo, navodnici treba da idu ako se radi o tvom zaglavlju, a ne o nekom
sistemskom. Kada su u pitanju '<>' radi se o sistemskim zaglavljima, npr:
Code:

#include <iostream>


Kada se 'header' datoteka nalazi u istom folderu gde i datoteka koja ga poziva
(cpp), onda je dovoljno reći, kao u gornjem primeru:
Code:

#include "saberi.h"


Ponekad postoji potreba da se pristupi zaglavlju koje nije u istom folderu kao
i datoteka iz koje se 'poziva'. Tada, vraćanje u prvi prethodni folder možete
postići sa:
Code:

#include "..\\saberi.h"

ili još jedan stepen niže:
Code:

#include "..\\..\\saberi.h"

ili ako treba pristupiti nekom poddirektorijumu:
Code:

#include "poddir\\saberi.h"

... mada moderni IDE-i čitaju *samo* naziv header datoteke, a putanju čitaju iz
projektnog fajla, tj. putanju koju ste odredili datoteci kada ste je dodali u projekat
(Add to Project...)

U praksi, kod većih projekata, koristi se mešavina, relativnog i lokalnog načina
'prozivanja' header datoteka - a strategiju treba odrediti svako za sebe, a sve je
stvar lakšeg održavanja...
[ Burgos @ 16.07.2005. 17:35 ] @
Citat:
Zapravo, navodnici treba da idu ako se radi o tvom zaglavlju, a ne o nekom
sistemskom. Kada su u pitanju '<>' radi se o sistemskim zaglavljima


Zar se < > ne upotrebljavaju kada se header nalazi u include direktorijuma kompajlera, a " " prvo pretrazuju ./ direktorijum, a onda include direktorijum kompajlera?

Ispravi me ako gresim :)
[ X Files @ 16.07.2005. 18:08 ] @
Citat:

Zar se < > ne upotrebljavaju kada se header nalazi u include
direktorijuma kompajlera, [...]


Pa da... To su sistemski folderi za koje je IDE unapred 'obavešten' i to često nije
samo jedan nego više foldera, ali se uvek radi o datotekama koje su stigle zajedno
sa okruženjem... Ponekad je kroz Project/Options moguće to promeniti i čak dodati
nove 'sistemske putanje', što ima smisla kao nekakav repozitorijum u timskom
radu...

Mislim da kod BCB postoji "Directories-Conditionals" kartica gde je definisan taj
sistemski deo "include" direktiva...

Citat:

a " " prvo pretrazuju ./ direktorijum, a onda include direktorijum kompajlera?

Verovatno da hoće... mada mislim da je pravilo jasno:
standardne header datoteke <>,
projektne header datoteke "",
...čime se jasno vidi i nazačava šta je čije.

Znam da je kod nekih command-line kompajliranja bilo izuzetno važno pratiti tačne
putanje, dok danas IDE radi sve za nas.

Trebalo bi pogledati neki on-line tutorijal...
[ dart_vejder @ 16.07.2005. 21:36 ] @
momci, prva ste liga!!
stvarno!!!

hvala vam puno...
[ 3MAJ86 @ 17.07.2005. 08:02 ] @
recimo prvi put kada sam pravio svoje header datoteke, smeshtao sam i deklaraciju i definiciju funkcije u "*.h"

ali to ne bih savetovao...
bolje je jednostavno da uvek znash "gde shta ide", videtjesh kasnije u radu da kada budesh imao vetje projekte i veliki broj takvih funkcija, ako sve budu bile na istom mestu bitje nezgodno kopati za istima...
[ dart_vejder @ 17.07.2005. 22:10 ] @
hmmm... ako je to sve tako , zasto mi to onda ne radi???
evo, upravo sam probao...
otvorio sam NEW-header file, tu sam stavio:
//////////
int saberi(int a,int b);
//////////

kompajler ga je sam nazvao Unit1.h, ja sam ga kasnije preimenovao u >>moje.h<<

zatim sam otvorio ponovo (koristio sam borland c++) borland, New-C++ file, i tu upisao
///////
#include "moje.h"
int saberi(int a,int b)
{
return a+b;
}
///////
i njega sam iz Unit1.cpp preimenovao u >>moje.cpp<< (prethodno sam iz onog projekta prebacio u folder cpp projekta heder fajl "moje.h"), pritisnuo sam "compile" (mada ne znam ni treba li) i sve je bilo ok...

onda sam i jedno i drugo prebacio u program files\borland\include
i u folder gdje cu praviti novi projekat koji ce koristiti vec gotovu f-ju saberi(a,b) (posto nisam bas najbolje shvatio je li dovoljno ovo ubaciti u "program files\borland\include" ili svaki put u folder novog projekta???)
i stavio sam 3 edit-a i jedno dugme:
///////////////////////////////
#include"moje.h"
#include <cstdio> ///// je li ovo <cstdio> i <iostream> vezano za moj heder fajl i zbog njega mora biti tu???- samo sa da ili ne je dovoljno
#include <iostream>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a=StrToInt(Edit2->Text);
int b=StrToInt(Edit3->Text);
Edit1->Text=IntToStr(saberi(a,b));
}
/////////////////////////////
ali nece da ga kompajlira, nego mi stalno izbacuje ovo:
/////
[Linker Error] Unresolved external 'saberi(int, int)' referenced from C:\DOCUMENTS AND SETTINGS\iME_KOMPJUTERA\DESKTOP\NEW FOLDER (3)\UNIT1.OBJ
//////
gdje sam pogrijesio?? i mozete li mi reci sta da uradim da bude dovoljno ubaciti novi .h i .cpp fajl samo u
"program files\borland\include" //nadam se da nisam pogrijesio path - shvatate vec na koji zapravo mislim...
i da vise ne mislim na njih, nego ih kasnije samo pozivam....

je li to mora sa : #include "program files\borland\include\\saberi.h"- u .cpp-u - sto je glupo jer nije svakome borland instaliran na istom mjestu...ili kako??

izvinjavam se, ali sta mogu...mislio sam da vas vise necu morati gnjaviti...

ps. mogu li napisati sve ovo u MS visual c++ - koristeci usput klase koje postoje u borlandu, a ne postoje u samom visual c++-u??npr. AnsiString?? ili TRichEdit ili Tmemo...????
i uostalom, mora li se ovo pisati u nekom razvojnom okruzenju, ili je dovoljno u notepad-u npr.???
[ NrmMyth @ 17.07.2005. 23:03 ] @
Citat:
je li to mora sa : #include "program files\borland\include\\saberi.h"- u .cpp-u - sto je glupo jer nije svakome borland instaliran na istom mjestu...ili kako??

Ne odsad ces morati samo pisat #include <saberi.h>

I daj napisi neki jednostavan program kao zbroji dva broja, da testiraj jeli ti to radi a ne ovo sta sad imas.

Citat:
ps. mogu li napisati sve ovo u MS visual c++ - koristeci usput klase koje postoje u borlandu, a ne postoje u samom visual c++-u??npr. AnsiString?? ili TRichEdit ili Tmemo...????
i uostalom, mora li se ovo pisati u nekom razvojnom okruzenju, ili je dovoljno u notepad-u npr.???

Ali ti ovo nismo vec rekli na programiranje.net.

Aj mi posalji tvoj ta dva fajla pa cu to sam pogledat pa ti javit.
[ Burgos @ 18.07.2005. 14:13 ] @
Nazalost, izgleda da cu morati da dopunim moj odgovor.

Ono sa < > pali samo ako su headeru deklaracije funkcija koje se nalaze u *.lib fajlu.

Putanja do tog lib fajla se mora upisati u linker settings (ili kako vec, nemam BCB) dijalogu.
[ dart_vejder @ 18.07.2005. 15:12 ] @
pa ovo i jeste f-ja koja sabira 2 broja...
dakle:

moje.h :

int saberi(int a,int b);



moje.cpp :

#include "moje.h"
int saberi(int a,int b)
{
return a+b;
}


i kada pisem program glavni, napravim form od 1 dugmeta, i 3 edit-a:

#include"moje.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a=StrToInt(Edit2->Text);
int b=StrToInt(Edit3->Text);
Edit1->Text=IntToStr(saberi(a,b));
}

i on javlja gresku:

[Linker Error] Unresolved external 'saberi(int, int)' referenced from C:\DOCUMENTS AND SETTINGS\iME_KOMPJUTERA\DESKTOP\NEW FOLDER (3)\UNIT1.OBJ

ma sad cu probati fino sve ispocetka napisati, u notepad-u, pa cu vidjeti hoce li raditi...

jesam li najbolje shvatio: i moje.h i moje.cpp dovoljno je da stavim u "program files\borland\include" i svaki put ga samo pozivam ??

uostalom, neko od vas je dao dobar predlog, da stavim ovdje te fajlove, pa da pogledate sami...
ko zeli, neka izvoli...
stavio sam tu jedan mali .zip....


[Ovu poruku je menjao dart_vejder dana 18.07.2005. u 16:39 GMT+1]
[ mulaz @ 18.07.2005. 15:39 ] @
jedno pitanje samo...

u saberi.h je definirana funkcija
u saberi.cpp je funkcija, i pred toga include za saberi.h
u programu.cpp je na pocetku include saberi.h
e sad mena zanima kako kod kompajla kompajler zna za saberi.cpp, kad je u programu samo saberi.h i u saberi.h nigde pomenut saberi.cpp? po filenameu? to bi bila jedina logicka razlaga ali nisam siguran pa zato pitam odakle compiler zna za saberi.cpp kad nije nigde pomenut?
[ dart_vejder @ 18.07.2005. 15:42 ] @
e i mene to isto brine!!!!!!!
stvarno mi nije jasno to!!!

da mi niste zaboravili nesto reci???

sad sam probao sljedece:

u moje.h sam stavio #include"moje.cpp"

a u moje.cpp nista nisam stavljao (od #include-a), i kad pokusam kompajlirati izbaci sljedecu gresku:

[C++ Error] Unit1.cpp(18): E2141 Declaration syntax error

[Ovu poruku je menjao dart_vejder dana 18.07.2005. u 16:47 GMT+1]

[Ovu poruku je menjao dart_vejder dana 18.07.2005. u 16:47 GMT+1]
[ dart_vejder @ 18.07.2005. 17:19 ] @
pokusao sam i u visual c++ -u sve ovo da uradim (kako ste mi vi rekli) , ovako sam uradio glavni program:

#include<stdio.h>
#include"moje.h"
main()
{
int a,b,c;
printf("unesite broj a: ");
scanf("%d",&a);
printf("unesite broj b: ");
scanf("%d",&b);
c=saberi(a,b);
printf("zbir a i b je : %d",c);
}

ali, daje gresku:
c:\documents and settings\ime_kompjutera\desktop\zadatak\da\ad.cpp(3) : error C2143: syntax error : missing ';' before 'PCH creation point'

pa u cemu je ovdje vise stvar???

sta to svi propustamo???
[ NrmMyth @ 18.07.2005. 18:17 ] @
Citat:
mulaz: jedno pitanje samo...

u saberi.h je definirana funkcija
u saberi.cpp je funkcija, i pred toga include za saberi.h
u programu.cpp je na pocetku include saberi.h
e sad mena zanima kako kod kompajla kompajler zna za saberi.cpp, kad je u programu samo saberi.h i u saberi.h nigde pomenut saberi.cpp? po filenameu? to bi bila jedina logicka razlaga ali nisam siguran pa zato pitam odakle compiler zna za saberi.cpp kad nije nigde pomenut?

To je nelogicno, ali tako je, interesantno zar ne?!

Jesili probao je li ti to radi na nekom jednostavnom CONZOLNOM programu:

#include<stdio.h>
#include"moje.h"

int main() {
int c=saberi(3,7);
printf("%d",c);
return 0;
}
[ dart_vejder @ 18.07.2005. 20:25 ] @
probao sam i tako nesto...
jednostavno nece...
eto, uostalom, ostavio sam .h i .cpp gore, pa ako ko hoce da proba "iz prve ruke" - neka izvoli...
ja jednostavno ne znam sta je to...???
[ mulaz @ 19.07.2005. 00:00 ] @
pa ako se u bla.h ubaci #include bla.cpp onda bi moglo

#include preprocesoru kaze da tamo gde taj #include stoji da ucita ceo file, kao da je deo program.cpp file-a. tako da kad ukuca saberi.h on ukuca samo definiciju fukncije, a ne i samu funkciju.
[ ChildInTime @ 19.07.2005. 00:17 ] @
Citat:
dart_vejder:
ali, daje gresku:
c:\documents and settings\ime_kompjutera\desktop\zadatak\da\ad.cpp(3) : error C2143: syntax error : missing ';' before 'PCH creation point'


Pa ocigledno je da ti nedostaje ';' , a to ti nedostaje u heder fajlu , jer kao sto vjerovatno znas na kraju prototipa funkcije ti mora doci ';'.Vjerovatno je to bio lapsus,nakon 24-satnog ekstremnog programiranja

Znaci islo bi (bezeze):
Code:


zbir.cpp

#include<iostream>
#include "zbir.h"

void main()
{
 std::cout<<"5 + 2 = "<<Zbir(5,2)<<endl;
 system("pause");
}

int Zbir(int a,int b) { return a+b; }

-----------

zbir.h 

int Zbir(int ,int) ;


Eto to je to...
Pozdrav.

[Ovu poruku je menjao ChildInTime dana 19.07.2005. u 01:18 GMT+1]

[Ovu poruku je menjao ChildInTime dana 19.07.2005. u 01:19 GMT+1]
[ japan @ 19.07.2005. 01:02 ] @
nisam bas najpazljivije procitao sve, pa cu mozda ponoviti nesto sto je neko vec rekao:

- u saberi.h stavis potpis/deklaraciju f-je
- u saberi.cpp telo/definiciju f-je
- u fajl.cpp inkludujes saberi.h (#include "saberi.h")
- kompajliras (bez linkovanja) saberi.cpp i fajl.cpp
- linkujes saberi.obj i fajl.obj


[ dart_vejder @ 19.07.2005. 15:59 ] @

@ChildInTime:

cekaj...nije mi jasna jedna stvar:
sto pises u "zbir.cpp" f-ju main???
zar ne treba tu samo staviti ispisanu f-ju koju zelimo kasnije da "zovemo", a u glavnom programu (fajl.cpp) da pisemo main, a prije main napisemo #include "zbir.h"?

ej, ljudi, ja ne mogu da vjerujem da se mi ovoliko raspravljamo oko ovoga....
sve sto ste mi rekli da uradim do sada- ja sam uradio....

moze li ko uzeti, napisati heder fajl "zbir.h" i "zbir.cpp" i "glavni_program.cpp" kako treba stvarno da izgledaju, da to fino probaju kod sebe, i kada vide da to stvarno radi- postavi ovdje jedan .zip koji sadrzi te fajlove , da svi mozemo skinuti i vidjeti...???????

ja mislim da je tako najbolje...

ok???
[ japan @ 19.07.2005. 16:37 ] @
napisano, testirano, radi...

posto vidim da koristis XP, fajlovi ce ti biti necitki zbog LF + CR za novi red, ali ispravi to i nece biti problema (nemam win trenutno pa moram ovako).

kompajliras (ako koristis borland) sa:
- bcc32 -c zbir.cpp (kompajliranje bez linkovanja)
- bcc32 -c main.cpp (kompajliranje bez linkovanja)
- bcc32 zbir.obj main.obj (linkovanje)
[ dart_vejder @ 20.07.2005. 09:32 ] @
hvala, evo skinuo sam , pa cu pogledati....
javicu da li sam uspio...
[ mulaz @ 20.07.2005. 15:54 ] @
Citat:
japan:

- kompajliras (bez linkovanja) saberi.cpp i fajl.cpp


aaa :) sad kapiram.. treba skompajlirati oba.. pa lunkovati.. hehe .. fala :D