[ 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