[ kragujevcanin @ 17.08.2009. 17:35 ] @
| Ovo je zadatak (visual c++)
Code:
#include <stdio.h> //zaglavlje
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include<time.h>
class vektor { //definicija klase
public:
vektor();
void show();
friend vektor operator+(vektor, vektor);
int vec[10];
};
vektor operator+ (vektor a, vektor b) //operator sabirahnja vektora
{
vektor temp;
for (int j=0; j<10; j++) temp.vec[j]=a.vec[j] + b.vec[j];
return temp;
vektor::vektor(); //konstruktor
{
srand ( time(NULL) );
for (int i=0; i<10; i++)
{
vektor.vec[i] = rand()%10+1; //GRESKA BROJ 1 syntax error : missing ';' before '.' (DVBA PUTA U ISTOM REDU)
}
srand ( time(NULL) );
}
void vektor::show() //prikazuje vektor na ekranu GRESKA BROJ 2 'show' : local function definitions are illegal
{
cout<< "nasumicno generisani vektor-\t";
for (int i=0; i<10; i++) cout<< vec[i];
}
void main() //kreira dva vektora pa drugi dodaje prvom.
{ //GRESKA BROJ TRI 'MAIN' : local function definitions are illegal
vektor prvi, drugi
prvi.show;
prvi=prvi=drugi
prvi.show();
}
Sve izgleda jednostavno (realno i jeste) ali mi prijavljuje GRESHKE.
[Ovu poruku je menjao X Files dana 17.08.2009. u 18:51 GMT+1] |
[ Goran Arandjelovic @ 17.08.2009. 18:51 ] @
Ajmo redom:
Prvo, što se tiče korekcije tvog koda da bi samo uspeo da kompajliraš:
1. Definicija f-je operator+ nema završnu vitičastu zagradu.
2. Skloni ";" iz prvog reda definicije konstruktora.
3. U definicji konstruktora ne treba koristiti vektor.vec, već samo vec zato što iz bilo koje f-je klase vektor pristupaš direktno poljima te klase, a i nigde ne postoji instanca klase koja se zove "vektor".
4. U main f-ji, prva tri reda nisu dobra. U prvom i u trećem si zaboravio ";" na kraju reda, a u drugom pozivaš f-ju show(), zaboravio si zagrade. Dakle, kao što si uradio u 4. redu. main f-ja po Standardu treba da vraća int, a ne void, ali to je manje bitno.
Drugo:
1. Tvoja klasa nema konstruktor kopije, operator=, destruktor. To ti treba da bi se kopiranja/uništavanje obavljalo tačno onako kako treba ako budeš rešio da zameniš polje vec nečim pametnijim.
2. Polje vec bi trebalo da bude privatno, a da obezbediš javne metode za čitanje i pisanje u njega. Takođe, ograničen si na vektor dužine 10, pa razmisli o dinamičkoj alokaciji pošto je ovako tvoj vektor poprilično beskoristan.
3. operator+ treba da ima kao argumente reference na vektore (tačnije reference na konstantne vektore), a ne da budu prosleđeni po vrednosti. Unutar operatora uskladi sabiranje sa eventualnom dinamičkom alokacijom (ako rešiš), a ne samo do 10 elemenata. Vodi računa o tome da vektori mogu da budu različitih dužina.
4. Takođe, vodi računa da se vrši konverzija u srand f-ji iz time_t u unsigned int ili tako nešto.
Po želji dodaj metode za rad sa vektorom... jer je ovako inače to poprilično "gola" klasa.
Možda sam nešto izostavio, jer nisam testirao tvoj kod.
[ kragujevcanin @ 17.08.2009. 18:56 ] @
Hvala!!
[ milkinizz @ 20.08.2009. 11:35 ] @
Caos,
spremam C++ i nasla sam ovaj tvoj zadatak pa ako nije postavi verziju koja radi-mislim da bi mi to pomoglo.
Veliki pozdrav od Kragujevcanke
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.