Programiranje

Programiranje u C++-u - pitanja i odgovori

athlon64 pon 5.9.2011 13:28

a koji qurac mi sad ne radi u ovom smeću od najobićnijeg zbrajala kad probam koristit funkcije -.-

 

#include<iostream>
#include<string>
#include<vector>
#include<math.h>
using namespace std;


int zbrajanje(int x , int y)
{
int rezultat;
rezultat = x + y;
return rezultat;
}
int main()
{
int z,a,b;
cout << "unesite 2 broja" << endl;
cin >> a >> b;
z=zbrajanje (a,b);
cout << z << endl;
}

athlon64 pon 5.9.2011 13:36
TracerCPP kaže...

U čemu je problem?

 

evo ti pa ćitaj:

 

------ Build started: Project: vjezba 2, Configuration: Debug Win32 ------
Build started 9/5/2011 1:26:51 PM.
InitializeBuildStatus:
  Touching "Debug\vjezba 2.unsuccessfulbuild".
ManifestResourceCompile:
  All outputs are up-to-date.
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(268,5): error MSB6006: "link.exe" exited with code 1120.
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
C:\Users\overclocker\Documents\Visual Studio 2010\Projects\vjezba 2\Debug\vjezba 2.exe : fatal error LNK1120: 1 unresolved externals

Build FAILED.

rustweaver pon 5.9.2011 13:37
athlon64 kaže...

a koji qurac mi sad ne radi u ovom smeću od najobićnijeg zbrajala kad probam koristit funkcije -.-

Kôd ti radi dobro. Druga je stvar sto se nisi sjetio includeati cstdlib i dodati system("pause"); na kraj main funkcije.

 

btw fali ti "return 0;" na kraju maina, i kôd ti je uzasno formatiran, ovako bi to trebalo izgledati:

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>

using namespace std;

int zbrajanje(int x , int y)
{
    int rezultat;
    rezultat = x + y;
    return rezultat;
}

int main()
{
    int z,a,b;
    cout << "unesite 2 broja" << endl;
    cin >> a >> b;
    z=zbrajanje (a,b);
    cout << z << endl;
    return 0;
}

 

EDIT: Sto se tice gornjeg problema, probaj ukloniti math.h pa onda kompajlirati, ili ga pretvori u cmath. Zapravo mozes jos ukloniti i vector i string.

TracerCPP pon 5.9.2011 13:41
athlon64 kaže...
TracerCPP kaže...

U čemu je problem?

 

evo ti pa ćitaj:

 

------ Build started: Project: vjezba 2, Configuration: Debug Win32 ------
Build started 9/5/2011 1:26:51 PM.
InitializeBuildStatus:
  Touching "Debug\vjezba 2.unsuccessfulbuild".
ManifestResourceCompile:
  All outputs are up-to-date.
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(268,5): error MSB6006: "link.exe" exited with code 1120.
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
C:\Users\overclocker\Documents\Visual Studio 2010\Projects\vjezba 2\Debug\vjezba 2.exe : fatal error LNK1120: 1 unresolved externals

Build FAILED.

To znači da program ne može prinaći funkciju main. Provjeri da li je cpp datoteka u koju pišeš dio projekta (otvori Solution explorer) ili si ju samo kreirao. Ili, jednostavno napravi novu Win32 konzolnu aplikaciju i dodaj novu cpp datoteku s gornjim kodom.

athlon64 pon 5.9.2011 13:43
TracerCPP kaže...
athlon64 kaže...
TracerCPP kaže...

U čemu je problem?

 

evo ti pa ćitaj:

 

------ Build started: Project: vjezba 2, Configuration: Debug Win32 ------
Build started 9/5/2011 1:26:51 PM.
InitializeBuildStatus:
  Touching "Debug\vjezba 2.unsuccessfulbuild".
ManifestResourceCompile:
  All outputs are up-to-date.
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(268,5): error MSB6006: "link.exe" exited with code 1120.
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
C:\Users\overclocker\Documents\Visual Studio 2010\Projects\vjezba 2\Debug\vjezba 2.exe : fatal error LNK1120: 1 unresolved externals

Build FAILED.

To znači da program ne može prinaći funkciju main. Provjeri da li je cpp datoteka u koju pišeš dio projekta ili si ju samo kreirao. Ili, jednostavno napravi novu Win32 konzolnu aplikaciju i dodaj novu cpp datoteku s gornjim kodom.

shvaćam štaoćeš reć,daj mi sec

rustweaver pon 5.9.2011 13:45
athlon64 kaže...

pa ne radi ni tvoj kod? i da,šta mi return 0; na kraju znaći?  tj zašto ne može bez njega,sry ali tek sam poćeo vježbat funkcije,malo se još moram uhodat.

Svi konzolni programi po zavrsetku izvrsavanja vracaju neku vrijednost (errorlevel), main funkcija je deklarirana da vraca integer, sto znaci da na kraju moras vratiti nekakvu smislenu vrijednost ili ces dobiti nekakav random garbage iz memorije kao errorlevel vrijednost programa.

 

Sto se tice tvog problema, ajde ukloni sve headere koje ne koristis, dakle math.h, vector, i string pa onda probaj kompajlirati. Ako to ne upali poslusaj tracerov savjet. Nazalost ne radim u VS pa se ne kuzim u njegove poruke s greskom, bit ce da je tracer na boljem tragu od mene.

rustweaver pon 5.9.2011 13:51
athlon64 kaže...

kopira sam kod u svježi projekt i radi ;) a radi i bez return 0; , btw jel mi mozete obijasnit u ćemu je bio problem?

Naravno da ti radi i bez return 0; ali ga svejedno stavi, gore sam ti naveo i zasto.

athlon64 pon 5.9.2011 13:59
TracerCPP kaže...

Očito je bio problem što datoteka nije bila dio projekta pa ju nije niti gledao kad je tražio funkciju main. Zato se nije dao compilirati.

da, to je bio već 15-ti kod koji sam pisao u istom projektu,samo bi pobrisao stari i pisao novi, hoćeš reć da se to ne smije radit?

neznam_ime pon 5.9.2011 16:19

@atholon64

neznam "oklen i kolko ucis?" ali po svemu nije dobro

btw u ovom tvom codu imas dost beskorisnih naredbi

#include <iostream>

using namespace std;

int zbrajanje(int x,int y)
{
    return x+y;
}

int main()
{
    int a,b;
    cout<<"unesite 2 broja\n";
    cin>>a;
    cin>>b;
    cout<<zbrajanje(a,b)<<endl;
    system("pause"); //samo ako se prozor odma zatvara
    return 0;
}
malo skraceno no ista funkcionalnost

captain_soap_McTawish pon 5.9.2011 20:31
neznam_ime kaže...

@atholon64

neznam "oklen i kolko ucis?" ali po svemu nije dobro

btw u ovom tvom codu imas dost beskorisnih naredbi

#include <iostream>

using namespace std;

int zbrajanje(int x,int y)
{
    return x+y;
}

int main()
{
    int a,b;
    cout<<"unesite 2 broja\n";
    cin>>a;
    cin>>b;
    cout<<zbrajanje(a,b)<<endl;
    system("pause"); //samo ako se prozor odma zatvara
    return 0;
}
malo skraceno no ista funkcionalnost

Tu naredbu ne smiješ staviti bez da uključiš cstdlib ovom naredbom na početku:

#include <cstdlib>

 

drnde pon 5.9.2011 20:46

Nikad me nece prestati fascinirati kako ljudi uporno forsiraju ukljucivanje dodatnog

header-a od 200tinjak linija koda u programe duljine < 20 linija cisto da bi mogli pozvati 

system("pause") na kraju da im se ne zatvori cmd prozor nakon izvrsavanja umjesto da

jednostavno napisu getchar()

neznam_ime pon 5.9.2011 21:13
captain_soap_McTawish kaže...
neznam_ime kaže...

@atholon64

neznam "oklen i kolko ucis?" ali po svemu nije dobro

btw u ovom tvom codu imas dost beskorisnih naredbi

#include <iostream>

using namespace std;

int zbrajanje(int x,int y)
{
    return x+y;
}

int main()
{
    int a,b;
    cout<<"unesite 2 broja\n";
    cin>>a;
    cin>>b;
    cout<<zbrajanje(a,b)<<endl;
    system("pause"); //samo ako se prozor odma zatvara
    return 0;
}
malo skraceno no ista funkcionalnost

Tu naredbu ne smiješ staviti bez da uključiš cstdlib ovom naredbom na početku:

#include <cstdlib>

 

nema potrebe ukjucivat cstdlib za system("pause") (barem meni radi bez izravnog ukljucivanja na svim ide-ima koje sam koristio)

drnde kaže...

Nikad me nece prestati fascinirati kako ljudi uporno forsiraju ukljucivanje dodatnog

header-a od 200tinjak linija koda u programe duljine < 20 linija cisto da bi mogli pozvati 

system("pause") na kraju da im se ne zatvori cmd prozor nakon izvrsavanja umjesto da

jednostavno napisu getchar()

pa evo neki su mozda  navikli na system("pause") i kako sam vec gore naveo nikad csdlib koristio nisam, i u cemu je problem i ako se ukjuci cstdlib uspori ce program sta? sve je stvar navike

rustweaver pon 5.9.2011 21:27
neznam_ime kaže...

nema potrebe ukjucivat cstdlib za system("pause") (barem meni radi bez izravnog ukljucivanja na svim ide-ima koje sam koristio)

Funkcija "system" je definirana u headeru stdlib.h (odnosno cstdlib za c++). Da bi ju koristio potrebno je includeati taj header. Radi ti zato sto koristis neki drugi header koji takoder includea stdlib.h.

neznam_ime uto 6.9.2011 07:46
rustweaver kaže...
neznam_ime kaže...

nema potrebe ukjucivat cstdlib za system("pause") (barem meni radi bez izravnog ukljucivanja na svim ide-ima koje sam koristio)

Funkcija "system" je definirana u headeru stdlib.h (odnosno cstdlib za c++). Da bi ju koristio potrebno je includeati taj header. Radi ti zato sto koristis neki drugi header koji takoder includea stdlib.h.

da, zato sam i reko da ju ne ukjucivam izravno ali ocito da se ukljuci preko iostream-a

Senaid_gates uto 6.9.2011 11:46
neznam_ime kaže...
rustweaver kaže...
neznam_ime kaže...

nema potrebe ukjucivat cstdlib za system("pause") (barem meni radi bez izravnog ukljucivanja na svim ide-ima koje sam koristio)

Funkcija "system" je definirana u headeru stdlib.h (odnosno cstdlib za c++). Da bi ju koristio potrebno je includeati taj header. Radi ti zato sto koristis neki drugi header koji takoder includea stdlib.h.

da, zato sam i reko da ju ne ukjucivam izravno ali ocito da se ukljuci preko iostream-a

Jeste u Visual Studio, meni u Dev-C++ nije, moram include-at <cstdlib>, a u VS sam doda i ako ne koristiš funkciju system("PAUSE");.

mbaksa uto 6.9.2011 16:08
Senaid_gates kaže...
neznam_ime kaže...

evo da ne ispadne da trolam, e sad kako tocno nezz jer nisam trazio

 

Kako, nije mi jasno?

Neki IDE-ovi imaju valjda automatsku uključuju tih par osnovnih biblioteka ako su potrebne. Zaboravljate da IDE može upravljati takvim stvarima - samo mora, bez vašeg znanja, proslijediti kompajleru i/ili linkeru odgovarajuće parametre. A i moguće je da se headeri kod pojedinih IDE-ova ili za pojedine kompajlere razlikuju, odnosno da su dodane neke funkcije u biblioteke u kojima se one inače ne nalaze.

 

Drugim riječima, očito je situacija takva kakva jest - sad ili je se može prihvatiti takvom ili se bacite na istraživanje. Može li se u DevC++-u ikako otkriti odakle je ta funkcija? Jel se možda mogu pregledavati korišteni headeri ili tako nešto?

mbaksa uto 6.9.2011 17:02

Deca, deca, deca... Zakaj baš na navek moram iti iskati de je problem?

 

Ako držiš tipku Ctrl i postaviš miša iznad naziva includeanog headera, klikom na njega otvara se dotični header. I prvo sam tako klikao bezveze po headerima pa poslije skužim da sam mogao tako kliknuti i na funkciju system. I kamo me to vodi? U header stdlib.h. Standardnu C biblioteku, stdlib.h, koja se očito automatski uključuje u svaki program - bar kod DevC++-a. A cstdlib se samo forwarda na stdlib.h.

Senaid_gates uto 6.9.2011 17:05
Senaid_gates kaže...

http://www.cplusplus.com/reference/clibrary/cstdlib/system/

/* system example : DIR */ #include <stdio.h> #include <stdlib.h> int main () { int i; printf ("Checking if processor is available..."); if (system(NULL)) puts ("Ok"); else exit (1); printf ("Executing command DIR...\n"); i=system ("dir"); printf ("The value returned was: %d.\n",i); return 0; }

 

Ovdje uključuju stdlib?

Fino za stil satavim kod, a ono ispiše ovako.{#}

Senaid_gates uto 6.9.2011 17:08
mbaksa kaže...

Deca, deca, deca... Zakaj baš na navek moram iti iskati de je problem?

 

Ako držiš tipku Ctrl i postaviš miša iznad naziva includeanog headera, klikom na njega otvara se dotični header. I prvo sam tako klikao bezveze po headerima pa poslije skužim da sam mogao tako kliknuti i na funkciju system. I kamo me to vodi? U header stdlib.h. Standardnu C biblioteku, stdlib.h, koja se očito automatski uključuje u svaki program - bar kod DevC++-a. A cstdlib se samo forwarda na stdlib.h.

Vidi stvarno, super, sad se igram sa svakom funkcijom tako, napraviti ću svoj Header, u njemu napraviti nekolike funkcije, include-ati i onda te funkcije koristiti, to sam čitao, ali nikad nisam pomislio to implementirati.Zato se ponekad treba baciti u ovakva istraživanja-čisto radi iskustva.{#}