Problem z dynamiczną alokacją danych do klasy

0

Stworzyłem sobie taką klasę:
class student
{
private:
string Imie;
string Nazwisko;
int Index;
float Srednia;
int K;
string *Przedmiot[20];
public:

student(string imie, string nazwisko, int indeks, float srednia, int k, string* przedmiot[20])
{
Imie=imie;
Nazwisko=nazwisko;
Index=indeks;
Srednia=srednia;
K=k;
*Przedmiot=*przedmiot;
}
 

};

I teraz muszę stworzyć dynamiczną tablicę, która stworzy dowolną liczbę dtudentów, coś ala:
cout<<"Ilu studentow chcesz dodac do bazy?<<endl;
cin>>ilosc;

Do tego muszę wpisac do kazdego obiektu dane tego studenta:
imię
nazwisko
srednia ocen

itd.
PRoszę, pomóżcie, bo siedzę nad tym już kilka godzin i NIC, tysiące błędów które się niewiem skąd biorą! Co skasuję jakiś wiersz, to znowu wyskakuje inny błąd! Już nie mogę [glowa] [glowa]

0
class student
{
pubic:
        string Imie;
        string Nazwisko;
        int Index;
        float Srednia;
        int K;
        string *Przedmiot[20];
};

int main()
{
  cout << "Podaj ilość ";
  int ilosc;
  cin >> ilosc;

  student *studenci = new student[ilosc];

  string tmp;
  for (int i = 0; i < ilosc; i++)
 {
    cin >> tmp;
   studenci[i]->Imie = tmp;
   studenci[i]->Nazwisko = "Brzęczyszczykiewicz";
 }
}

Powinno działać.

0

TO ŻYJE!! WIELKIE DZIĘKI!!

student *studenci = new student[ilosc];

string tmp;
for (int i = 0; i < ilosc; i++)
{
cin >> tmp;
studenci[i].Imie = tmp;
studenci[i].Nazwisko = "Brzęczyszczykiewicz";
}
system("pause");
}

Ostatnia prośba. Mógłbyś mi o jakoś przetłumaczyć na polski?
czym jest ten wskaźnik studenci?
Bo niewątpliwie stworzyłeś tablicę dynamiczną, ale nie do końca rozumiem.

0
class student
{
pubic:
        string Imie;
        string Nazwisko;
        int Index;
        float Srednia;
        int K;
        string *Przedmiot[20];
};

int main()
{
  cout << "Podaj ilość ";
  int ilosc;
  cin >> ilosc;

Wskaźnik to wskaźnik. Wskazuje na jakieś miejsce w pamięci. Możemy mu przypisać jeden element lub tyle, ile dusza zapragnie. Polecam jakąś książkę o programowaniu lub przejrzenie kilku stron poświęconym tematyce C++.

  student *studenci = new student[ilosc];

  string tmp;
  for (int i = 0; i < ilosc; i++)
 {
    cin >> tmp;

Z racji, że jest to wskaźnik używamy -> Również polecam jakąś książkę o programowaniu w C++.

   studenci[i]->Imie = tmp;
   studenci[i]->Nazwisko = "Brzęczyszczykiewicz";
 }
}
0

Właśnie musiałem przerobić -> na . żeby kompilator nie krzyczał.
Do tego w środowisku visual'a cin >> tmp krzyczy mi taki błąd:
Error 1 error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)

co lepsze, w Borlandzie jest ok.

Masz na to jakiś pomysł?

0
dziubo4 napisał(a)

Właśnie musiałem przerobić -> na . żeby kompilator nie krzyczał.

Tak faktycznie. Mój błąd (tablica obiektów, a nie wskaźnik na pojedynczy obiekt).

Tu jest całkiem poprawny kod:

#include <iostream>
#include <string> // O brak tego pliku  może się  pluć VC++

using namespace std;

class student
{
public:
        string Imie;
        string Nazwisko;
        int Index;
        float Srednia;
        int K;
        string *Przedmiot[20];
};

int main()
{
  cout << "Podaj ilość ";
  int ilosc;
  cin >> ilosc;

  student *studenci = new student[ilosc];

  string tmp;
  for (int i = 0; i < ilosc; i++)
  {
    cin >> tmp;
    studenci[i].Imie = tmp;
    studenci[i].Nazwisko = "Brzęczyszczykiewicz";
  }

  delete [] studenci;
}

Nawet parę literówek się znalazło. Tym razem sprawdziłem kompilując ;)

U mnie nie wystąpiły żadne błędy:
g++ 1.cpp -Wall --pedantic

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