Przesyłanie dynamicznej tablicy do funkcji

0

Witam, mam taki mały problem - zacząłem pisać program, w którym chcę przesłać wartość dynamicznej tablicy do funkcji. Niestety, przy próbie kompilacji, wywala taki błąd:

37 44 [Error] expected primary-expression before ']' token

 #include <iostream>

using namespace std;

class student
{
    public:

    string imie, nazwisko;
    int numer_indeksu, semestr;
    int liczba_ocen;

    double Srednia_Ocen(int& liczba_ocen, int ocena[]);
    void Licz_Stypendium();

};

int main()
{
    student student;
    int *ocena;

    cout << "Podaj imie studenta: " << endl;
    cin >> student.imie;
    cout << "Podaj nazwisko studenta: " << endl;
    cin >> student.nazwisko;
    cout << "Ile ocen w semestrze otrzymal student " << student.imie << " " << student.nazwisko << "?" << endl;
    cin >> student.liczba_ocen;

    ocena = new int[student.liczba_ocen];
    
    for(int j=0;j<=student.liczba_ocen;j++){
	    cout << "Podaj ocene numer " << j << ": ";
	    cin >> ocena[j];
	}
	
	Srednia_Ocen(& student.liczba_ocen, ocena[]);
    return 0;
}

double student::Srednia_Ocen(int& liczba_ocen, int ocena[])
{
    int i;
    double srednia;
    for(i=0;i<=liczba_ocen;i++){
    ocena[i]+=ocena[i];
    }
	srednia=ocena[i]/i;
	return srednia
}

void student::Licz_Stypendium()
{

}

Uważam, że w zły sposób przesyłam wartość. Czy mógłby mi ktoś podsunąć jakiś pomysł? Próbowałem już wielu sposobów.

0

Kto zjadł średnik?

return srednia
0
  1. obiekt student już ma w sobie wartość liczba_ocen nie trzeba przekazywać dla obliczenia średniej
  2. obiekt student powinien mieć w sobie również tablicę dynamiczną int *ocena;
  3. przekazywanie wartości przez referencje:
void foo(int &value) { ccut<<"value="<<value<<';'<<endl }

int main()
  {
   int x=5;
   foo(x);
   rerurn 0;
  }
  1. przekazywanie wartości przez wskaźnik:
void foo(int *value) { ccut<<"value="<<*value<<';'<<endl }

int main()
  {
   int x=5;
   foo(&x);
   rerurn 0;
  }
  1. przekazywanie wartości przez wartość:
void foo(int value) { ccut<<"value="<<value<<';'<<endl }

int main()
  {
   int x=5;
   foo(x);
   rerurn 0;
  }
0

Przeanalizuj ten program, jeśli o to chodziło.

 #include <iostream>
 
using namespace std;
 
class student
{
    public:
    string imie, nazwisko;
    int numer_indeksu, semestr;
    int liczba_ocen;
    int *oceny;
    double Srednia_Ocen()
    {
    	double suma=0;
    	for(int i=0;i<liczba_ocen;i++)
		{
    	suma+=oceny[i];
   		}
        return suma/liczba_ocen;
	}
    void Licz_Stypendium();
    void new_oceny()
    {
    	oceny=new int[liczba_ocen];
    }
 	~student()
 	{
 		delete[] oceny;
 	}
};
 
int main()
{
    student student;
    cout << "Podaj imie studenta: " << endl;
    cin >> student.imie;
    cout << "Podaj nazwisko studenta: " << endl;
    cin >> student.nazwisko;
    cout << "Ile ocen w semestrze otrzymal student " << student.imie << " " << student.nazwisko << "?" << endl;
    cin >> student.liczba_ocen;
    student.new_oceny();
    for(int i=0;i<student.liczba_ocen;i++)
	{
            cout << "Podaj ocene numer " << i+1 << ": ";
            cin >> student.oceny[i];
    }
    cout.precision(2);
    cout<<student.Srednia_Ocen();
    return 0;
}

 
void student::Licz_Stypendium()
{
 
} 

Wydaje mi się że nie rozumiesz co to jest programowanie obiektowe.

0

Ja tylko przerobiłem na szybkiego jego program.

0

Dzięki chłopaki, jesteście wielcy! Spróbuję przeanalizować Twój program, adam vip, po powrocie z pracy. Mógłbyś mi napisać, czemu stwierdziłeś, że nie wiem, czym jest programowanie obiektowe? Przyznam Ci się, że staram się nauczyć programowania, choć nie zawsze mi to wychodzi. Cóż, wszystko przede mną ;)

Raz jeszcze - dzięki!

0

Nie tyle chodzi że nie rozumiesz, chodzi o to że nie wykorzystałeś zalet programowania obiektowego, tylko bawiłeś się w przekazywanie zmiennych jako parametr. Lepiej jak, piszesz to na obiektach, używać metod. Ja jeszcze przeoczyłem, jak wyżej napisał kolega @-_13th_Dragon żeby ograniczyć dostęp zmiennych, to się chyba nazywa "hermetyzacja klas", jak mówi mój nauczyciel.

0

W sumie ja też nie jestem w tej dziedzinie ekspertem. W końcu jeszcze mam gimnazjum :)

0

Ale ja nie powiedziałem że tego nie rozumiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1