Poslao: 23 Nov 2009 06:23
|
offline
- Balkanac82

- Legendarni građanin
- Pridružio: 20 Dec 2004
- Poruke: 2887
- Gde živiš: Na Balkanu
|
Dobio sam program koji treba da izmenim tako da koristi dinamički niz za objekte. Deo koda mi je dat, kao i deo koda koj novi program mora da sadrži. Evo do čega sam ja došao
//This program creates student objects
//and computes their average grade point averages
#include <iostream>
#include <iomanip>
using namespace std;
class Student
{
private:
int IDNumber;
double gpa;
public:
Student(const int i, const double g);
friend double operator+(const Student &, const Student &);
};
Student::Student(const int id, const double g)
{
Student::IDNumber = id;
Student::gpa = g;
}
double operator+(const Student &stud1, const Student &stud2)
{
double sum, average;
sum = stud1.gpa + stud2.gpa;
return(sum);
}
int main()
{
int size;
cout << "How many students do you want to process? ";
cin >> size;
Student *stud = new Student[size];
stud[0] = Student(2,2);
//creates a pointer to array of objects
//double average = (stud[1] + stud[2]) / size;
//cout << setiosflags(ios::fixed | ios::showpoint);
//cout.precision(2);
//cout << "Average is " << average << endl;
}
Dakle imam klasu Student i unutar nje constructor.
U samo programu bih trebalo da definišem dužinu niza.
int size;
cout << "How many students do you want to process? ";
cin >> size;
Student *stud = new Student[size];
stud[0] = Student(2,2);
//creates a pointer to array of objects
To je taj deo koda. Greška je u toj četvrtoj liniji. Zar taj kod ne bi trebalo da rezerviše memoriju za "size" broj objekata tipa Student?
Za sada me ne interesuje ostatak programa, već samo hoću da pokrenem ovo sa mrtve tačke, a ostalo mislim da mogu sam napraviti.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 23 Nov 2009 06:53
|
offline
- zend

- Počasni građanin
- Pridružio: 22 Okt 2009
- Poruke: 900
- Gde živiš: Pancevo
|
Probaj da koristis STL pokusaj tako ili deklariši niz proizvoljnog broja
Mislim da bi moglo da uspe.Nista ti ne garantujem dajem primer
|
|
|
|
Poslao: 23 Nov 2009 11:02
|
offline
- pixxel

- Legendarni građanin
- Pridružio: 21 Jun 2005
- Poruke: 9091
- Gde živiš: Tu i tamo...
|
@Balksnac:
1. Ovaj deo koda u deklaraciji:
public:
Student(const int i, const double g); bi trebalo da glasi ovako:public:
Student(const int id, const double g); (napisao si int i a unutar konstruktora radis sa id)
2. Ako se dobro secam c++ -a (a ne secam se, jer ce da me neko ko ga dobro zna da me izispravlja samo tako ), ovde ti ne valja konstruktor.
kad kazes new Student, a ne navedes u zagradi ono sto si zadao u konstruktoru, sta ce on da napravi?
(kazes new Student, a deklaracija je Student(const int id, const double g) )
Treba ti neki default konstruktor, da opises sta da radi ako NE NAVEDES id i g...
@Ivan: ako dobije kod koji je bio i kod koji mora da bude, onda ne sme da menja kako mu se prohte, pogotovo da ubacuje stl i ostala cuda. Verovatno mora da ga uradi u cistom c++...
|
|
|
|
Poslao: 23 Nov 2009 12:48
|
offline
- zend

- Počasni građanin
- Pridružio: 22 Okt 2009
- Poruke: 900
- Gde živiš: Pancevo
|
pixxel ::@Balksnac:
1. Ovaj deo koda u deklaraciji:
public:
Student(const int i, const double g); bi trebalo da glasi ovako:public:
Student(const int id, const double g); (napisao si int i a unutar konstruktora radis sa id)
2. Ako se dobro secam c++ -a (a ne secam se, jer ce da me neko ko ga dobro zna da me izispravlja samo tako ), ovde ti ne valja konstruktor.
kad kazes new Student, a ne navedes u zagradi ono sto si zadao u konstruktoru, sta ce on da napravi?
(kazes new Student, a deklaracija je Student(const int id, const double g) )
Treba ti neki default konstruktor, da opises sta da radi ako NE NAVEDES id i g...
@Ivan: ako dobije kod koji je bio i kod koji mora da bude, onda ne sme da menja kako mu se prohte, pogotovo da ubacuje stl i ostala cuda. Verovatno mora da ga uradi u cistom c++...
@***Ja sam samo predpostavio ne znam C++ u full-u i samo sam dao primer da pokusa nista ne gubi a nisam isto hteo opsirnije da me ostali iskusniji ne bi ispravljali!!!Pokusao sam koliko toliko da mu pomognem!!!
|
|
|
|
Poslao: 23 Nov 2009 14:27
|
offline
- Balkanac82

- Legendarni građanin
- Pridružio: 20 Dec 2004
- Poruke: 2887
- Gde živiš: Na Balkanu
|
@pixxel
To je samo prototip i ne bi trebalo da je do toga problem. Ipak, probao sam, ali i dalje je problem isti.
|
|
|
|
Poslao: 23 Nov 2009 20:20
|
offline
- bobby

- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Ne poznajem bas nesto C++ sintaksu, ali gde je ovde konstruktor klase koji prihvata integer kao parametar?
Student *stud = new Student[size];
Ako ja razumem ovu sintaksu, onda ovde pozivas konstruktor i prosledjujes mu parametar size
Pre toga, gore u definiciji same klase nigde nemas konstruktor koji bi prihvatio taj size
Ovo je jedino sto mi pada na pamet, mada mozda gresim u potpunosti posto mi je C++ sintaksa potpuno nepoznata.
|
|
|
|
Poslao: 23 Nov 2009 20:47
|
offline
- Balkanac82

- Legendarni građanin
- Pridružio: 20 Dec 2004
- Poruke: 2887
- Gde živiš: Na Balkanu
|
Napisano: 23 Nov 2009 20:41
Početni program je koristio samo dva objekta tipa Student
Student s1(x, y), s2(y,w);
Taj deo koda koji prijavljuje grešku sam dobio kao deo zadatka i u tom obliku se mora koristiti. Moram da preuredim zadatak tako da uz tu liniju definišem dinamički niz proizvoljnje dužine.
Po svim knjigama koje imam (3), ako i na netu sam nailazio na upravo taj način definisanja niza. Prvo se definiše pointer na objekt tipa Student, a onda mu se dodeli dužina size.
Kad napišem
int *stud = new int[size];
nemam tih problema, već se uredno formira dinamički niz celih brojeva dužine size. Nikako ne kontam zašto to ne funkcioniše sa objektom Student, kad je funkcionisalo sa samo dva ista objekta ručno upisana.
Dopuna: 23 Nov 2009 20:47
@bobby
Kad se prosledjuje parametar koristi se (). Ovde definišem dužinu niza, a paramtre posle prosledjujem na stud[0], stud[1]...
|
|
|
|
Poslao: 23 Nov 2009 21:12
|
offline
- bobby

- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Nesto sada gledam...
U implementaciji Student::Student nema definisan tip rezultata (tebi treba void).
Onda, operator+ nije implementiran u sklopu klase (Student::operator+) mada je gore definisan kao metoda klase.
Opet, ja ciljam u mraku, posto ne poznajem C++ sintaksu.
|
|
|
|
Poslao: 23 Nov 2009 21:19
|
offline
- Balkanac82

- Legendarni građanin
- Pridružio: 20 Dec 2004
- Poruke: 2887
- Gde živiš: Na Balkanu
|
Student::Student je konstruktor clase Student. Kod konstruktora ne postoji tip.
|
|
|
|
Poslao: 23 Nov 2009 21:49
|
offline
- bobby

- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Ja sam to uporedjivao nesto sa ovim ovde:
[Link mogu videti samo ulogovani korisnici]
|
|
|
|