|
[ absBeg @ 29.01.2007. 17:45 ] @
| Dva sata kopam po staroj dokumentaciji, ali se nikako ne mogu sjetiti kako se funkcija poziva kao parametar druge funkcije.
Evo zadatka:
Pomocu malenih funkc saberi, oduzmi i pomnozi izvrsiti racunske operacije nad a i b, ali tako da se poziva funkc izracunaj koja kao parametre uzima a,b i pokazivac na funkc koja treba da se pozove. ja sam dosao dovde i zapeo. prijavljuje greske o nepoznatoj funkciji-pointeru, o zagradama koej okruzuju pointer i o tome da je funkcija return vrijednost
Code:
#include <iostream>
using namespace std;
int izracunaj(int a,int b,(*pFunk)(int x,int y)){
return pFunk(a,b);
}
int saberi(int a,int b){
return a+b;
}
int oduzmi(int a,int b){
return a-b;
}
int pomnozi(int a,int b){
return a*b;
}
int main()
{
int a,b;
char operacija;
cout << "Unesite dva broja!\n";
cin >> a >> b;
cout << "Unesite racunsku operaciju: ";
cin >> operacija;
int rezultat;
if (operacija=='+')
rezultat=izracunaj(a,b,&saberi(a,b));
if (operacija=='-')
rezultat=izracunaj(a,b,&oduzmi(a,b));
if (operacija=='*')
rezultat=izracunaj(a,b,&pomnozi(a,b))
cout << "Rezultat je "<<rezultat<<endl;
return 0;
} |
[ X Files @ 29.01.2007. 19:08 ] @
Onako, odokativno /netestirano/:
Umesto:
Citat:
int izracunaj(int a,int b,(*pFunk)(int x,int y)){
return pFunk(a,b);
}
... mozda bi trebalo:
Code:
typedef int (*pFunk)(int x,int y);
int izracunaj(int a,int b, int (*pF)(int, int)){
return pF(a,b);
Dalje, umesto:
Citat:
if (operacija=='+')
rezultat=izracunaj(a,b,&saberi(a,b));
if (operacija=='-')
rezultat=izracunaj(a,b,&oduzmi(a,b));
if (operacija=='*')
rezultat=izracunaj(a,b,&pomnozi(a,b));
Pokusaj:
Code:
if (operacija=='+')
rezultat=izracunaj(a,b,/*(pFunk)*/saberi);
if (operacija=='-')
rezultat=izracunaj(a,b,/*(pFunk)*/oduzmi);
if (operacija=='*')
rezultat=izracunaj(a,b,/*(pFunk)*/pomnozi);
Ovo moras sam da pokusas, ja sam odavno sa Borlandom, pa sam izgubio svaki smisao i osecaj
za prenosivost i standarde.
[Ovu poruku je menjao X Files dana 29.01.2007. u 20:23 GMT+1]
[ absBeg @ 29.01.2007. 21:20 ] @
>
hm...moze li ikako bez typedef? sto je najgore, pointer na funkciju
treba da radi kao (*pointer) (tip,tip), ali ne znam sto ga funkcija ne
prihvaca. VS ga podvlaci kao neku nepostojecu varijablu, tj. kao da se
parametar mora prethodno deklarirati. cudno skroz.
[ Mali Misha @ 29.01.2007. 21:48 ] @
Sada radi?
[ X Files @ 30.01.2007. 07:01 ] @
Citat:
hm...moze li ikako bez typedef?
Može. Evo sad sam pogledao. To typedef mi je ionako ostalo kao slepo crevo
(dok sam gledako kako da se to kulturno odradi) - nije uopšte potrebno.
Ceo primer je lepo postavio Mali Misa. Radi cak i na Borlandu ;)
[ absBeg @ 30.01.2007. 13:25 ] @
>
@MaliMisha
Hvala, radi super. Znaci grijesio sam jer sam pogresno slao adresu
funkcije. medjutim, sta si ti ovdje uradio - jesi li pukim navodjenjem
imena funkcije (bez zagrada) u stvari proslijedio adresu pointeru? davno
sam ovo ucio, pa se vise ne sjecam da se funkc moze proslijediti samo
preko njenog imena.
[ X Files @ 30.01.2007. 13:29 ] @
Greška je bila i ovo:
Code:
int izracunaj(int a,int b,(*pFunk)(int x,int y)){ // <--- Nisi naveo povratni TIP: int (*pFunk)
return pFunk(a,b);
}
[ absBeg @ 30.01.2007. 14:50 ] @
Citat: X Files: Greška je bila i ovo:
Code:
int izracunaj(int a,int b,(*pFunk)(int x,int y)){ // <--- Nisi naveo povratni TIP: int (*pFunk)
return pFunk(a,b);
}
hm, zar treba povratni tip kad se funkcija koristi kao parametar?
[ X Files @ 30.01.2007. 15:09 ] @
Citat:
hm, zar treba povratni tip kad se funkcija koristi kao parametar?
Pazi, imaš int a - integer, int b - integer, (*pFunk)(int x,int y) - nema, nisi naveo?!
[ absBeg @ 30.01.2007. 15:45 ] @
Citat: X Files: Pazi, imaš int a - integer, int b - integer, (*pFunk)(int x,int y) - nema, nisi naveo?!
ma evo skontao sam kakve gluposti i ja pitam 
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|