PDA

Pogledaj cijelu verziju : C++... pomozite mi s klasama!



djelim s nulom
01-04-2008, 18:47
Evo napokon sam prelistao 225 stranica knjige "Demistificirani C++" i dođoh do tih famoznih klasa. Uglavnom sam shvatio o čemu se tu radi ali već na prvom primjeru iz knjige kojeg sam proba na kompu pojavljuje se jedan error kojega ne kužim. Molim vas možete li mi pomoći!


#include <iostream>
using namespace std;

void main()
{
class vektor
{
public:
float ax, ay;
void mnoziskalarom(float skalar);
};

void vektor::mnoziskalarom(float skalar)
{
ax = ax * skalar;
ay = ay * skalar;
}

vektor v;
v.mnoziskalarom(5.0);
}

error C2601: 'main::vektor::mnoziskalarom' : local function definitions are illegal


Vidim i sam po debuggeru da je neka početnička greška... ali ja sam početnik s klasama... možete li mi pomoći, znate li gdje je greška i kako je popraviti!?

DragonSoul
01-04-2008, 20:18
Ovdje (http://www.google.hr/search?hl=hr&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=Wyl&q=error+C2601+%3A+local+function+definitions+are+i llegal&btnG=Tra%C5%BEi&meta=)Sje riješenje svih tvojih problema :D

djelim s nulom
01-04-2008, 20:52
Već sam ja progooglao, ali ne nalazim rješenje, koliko ja vidim ne definiram jednu funkciju unutar druge i nisam zaboravio zatvorit vitičaste a to se navodi kao glavni problemi... Pa zato se nadam da će ovo znat odgonetnuti netko s foruma.

djelim s nulom
01-04-2008, 21:07
Evo privremeno sam rješio problem tako što sam deklaraciju vektora i funkcije prebacio izvan main():

#include <iostream>
using namespace std;

class vektor
{
public:
float ax, ay;
void mnoziskalarom(float skalar);
};

void vektor::mnoziskalarom(float skalar)
{
ax = ax * skalar;
ay = ay * skalar;
}

void main()
{

vektor v;
cin >> v.ax >> v.ay;
v.mnoziskalarom(5.0);
cout << v.ax << endl << v.ay;
char z;
cin >> z;

}


ali zna li tko u čemu je problem i može li mi objasniti?

koki007
02-04-2008, 15:12
Koliko ja znam taj main je isto funkcija, tako da ipak definiras funkciju unutar funkcije....

djelim s nulom
02-04-2008, 19:12
Ma znam to, ali ipak mislim da bi to tribalo biti moguće, pa što su onda rekurzije nego funkcije unutar funkcija? Želim znati zašto mi C++ u ovom slučaju zabranjuje ovaj prvi postupak, valjda će se već nać netko tko će mi objasniti...

Burek_fr0m_SPACE
03-04-2008, 01:52
Ma znam to, ali ipak mislim da bi to tribalo biti moguće, pa što su onda rekurzije nego funkcije unutar funkcija? Želim znati zašto mi C++ u ovom slučaju zabranjuje ovaj prvi postupak, valjda će se već nać netko tko će mi objasniti...
Daleko od toga... kod rekurzije, funkcija pozivaSsamu sebe (tj. istu tu funkciju). Funkcija nema šta tražiti unutar druge funkcije.

Tracer
03-04-2008, 10:32
Evo privremeno sam rješio problem tako što sam deklaraciju vektora i funkcije prebacio izvan main():

#include <iostream>
using namespace std;

class vektor
{
public:
float ax, ay;
void mnoziskalarom(float skalar);
};

void vektor::mnoziskalarom(float skalar)
{
ax = ax * skalar;
ay = ay * skalar;
}

void main()
{

vektor v;
cin >> v.ax >> v.ay;
v.mnoziskalarom(5.0);
cout << v.ax << endl << v.ay;
char z;
cin >> z;

}


ali zna li tko u čemu je problem i može li mi objasniti?

Problem je u tome što su funkcije ZASEBNO MEMORIJSKI ODVOJENE i zato ne možeš jednu funkciju deklarirati unutar druge. Također, kada bi to napravio bilo bi pitanje gdje ta funkcija zapravo postoji? Globalno za cijeli program ili samo unutar te funkcije u kojoj je deklarirana (a to nema smisla).

Tracer
03-04-2008, 10:34
Ma znam to, ali ipak mislim da bi to tribalo biti moguće, pa što su onda rekurzije nego funkcije unutar funkcija? Želim znati zašto mi C++ u ovom slučaju zabranjuje ovaj prvi postupak, valjda će se već nać netko tko će mi objasniti...
Rekurzija je vezana uz pojam poziva funkcije tj. kada funkcija POZIVA samu sebe, a ne kada se u njoj nalazi DEKLARACIJA još neka druge funkcija.

djelim s nulom
03-04-2008, 13:56
Ma to sam se malo zeznuo sa rekurzijama... Znači nema deklaracije funkcije unutar funkcije uopće... hvala na objašnjenju. :bravo: