expected primary-expression before '.' token

0

Cześć, piszę program na zaliczenie na studia i podczas budowania go w pliku z klasami dostaję taki oto błąd "error: expected primary-expression before '.' token". Próbowałem już znaleźć odpowiedź na google, ale nic nie znalazłem.

Oto cały kod z klasami.

#include <iostream>
#include <fstream>

using namespace std;

class Aktor
{
private:
    string nazwisko;
    int ID_aktor;

public:
    Aktor(){
    ID_aktor=0;
    nazwisko= "brak" ;
    }

    Aktor(int ID_aktor, string nazwisko){
    this -> ID_aktor = ID_aktor;
    this -> nazwisko = nazwisko;
    }

    int daj_id (){
    return ID_aktor;
    }

    string daj_nazwisko (){
    return nazwisko;
    }

    void pokaz_aktora(){
        cout<< ID_aktor << " " << nazwisko<<endl;
    }

    friend class Obsada;
};


class Film
{
private:
    int ID_film;
    string tytul;
    int rok_produkcji;

public:
    Film(){
    ID_film=0;
    tytul = "brak";
    rok_produkcji = 2000;
    }

    Film(int ID_film, string tytul, int rok_produkcji){
    this -> ID_film = ID_film;
    this -> tytul = tytul;
    this -> rok_produkcji = rok_produkcji;
    }

    int daj_id (){
    return ID_film;
    }

    string daj_tytul (){
    return tytul;
    }

    int daj_rok (){
    return rok_produkcji;
    }

    void pokaz_film(){
    cout<< ID_film << " " << tytul << " " << rok_produkcji <<endl;
    }

    friend class Obsada;
};

class Obsada{

    int ida = Aktor.ID_aktor;
    int idf = Film.ID_film;

};

0

A main masz?

0

Musisz utworzyć obiekty klas Aktor i Film i dopiero wtedy będziesz mógł uzyskać dostęp do składowych klasy za pomocą operatora .
btw. po co klasy Aktor i Film są zaprzyjaźnione z Obsada skoro moją gettery

1
class Obsada{

    int ida = Aktor.ID_aktor;
    int idf = Film.ID_film;

};

Co to ma Twoim zdaniem robić?

0
Patryk27 napisał(a):
class Obsada{

    int ida = Aktor.ID_aktor;
    int idf = Film.ID_film;

};

Co to ma Twoim zdaniem robić?

Pobierać te 2 dane z tamtych klas, które będą zapisywane w pliku.

0

Pobierać te 2 dane z tamtych klas, które będą zapisywane w pliku.

Klasy same w sobie nie trzymają żadnych danych przecież (na zasadzie: jaka jest w takim razie wartość pola ID_aktor w Twoim kodzie?), zatem jakie dane oczekujesz, że się tam pojawią?

Dopiero do instancji klas (np. Aktor janKowalski;) możesz wprowadzić jakieś dane, pomijając oczywiście pola statyczne - zatem jakiej wartości oczekujesz w Twoich Obsada::ida oraz Obsada::idf?

0
Patryk27 napisał(a):

Pobierać te 2 dane z tamtych klas, które będą zapisywane w pliku.

Klasy same w sobie nie trzymają żadnych danych przecież (na zasadzie: jaka jest w takim razie wartość pola ID_aktor w Twoim kodzie?), zatem jakie dane oczekujesz, że się tam pojawią?

Dopiero do instancji klas (np. Aktor janKowalski;) możesz wprowadzić jakieś dane, pomijając oczywiście pola statyczne - zatem jakiej wartości oczekujesz w Twoich Obsada::ida oraz Obsada::idf?

W takim razie jak inaczej napisać klasę obsada taką jak z polecenia na zdjęciu?

0

Wydaje mi się, że nadinterpretujesz treść polecenia - po co tam jakieś idCośtam = klasa.idCośtam?

class Obsada {

protected:
  int idFilmu, idAktora;  

}

Chociaż technicznie tak byłoby najlepiej i jednocześnie miałoby to jakiś sens:

class ObsadaFilmu {

protected:
  Film film;
  std::vector<Aktor> aktorzy;

}
0
Patryk27 napisał(a):

Wydaje mi się, że nadinterpretujesz treść polecenia - po co tam jakieś idCośtam = klasa.idCośtam?

class Obsada {

protected:
  int idFilmu, idAktora;  

}

Chociaż technicznie tak byłoby najlepiej i jednocześnie miałoby to jakiś sens:

class ObsadaFilmu {

protected:
  Film film;
  std::vector<Aktor> aktorzy;

}

Okej, tylko teraz nie mam pojęcia jak np wyświetlić aktora, który wystąpił w największej liczbie filmów. Moje pliki z danymi wyglądają tak:
Filmy
1 shrek 2000
2 wolyn 2016
Aktorzy
1 Daniel
2 Linda

Prawdopodobnie muszę dodać do menu jeszcze opcję ręcznego dodawania obsady, ale nie wiem nawet jakby to miało do końca wyglądać. Może jest na to jakiś inny sposób?
Dokleję jeszcze mojego aktualnego maina:

#include <iostream>
#include "class.h"
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;


int main()
{
    int menu;
    for(;;){
    cout<<endl;
    cout<<"MENU"<<endl;
    cout<< "1. Dodaj Aktora" <<endl;
    cout<< "2. Pokaz Aktora" <<endl;
    cout<< "3. Dodaj Film" <<endl;
    cout<< "4. Pokaz Film"<<endl;
    cout<< "5. Lista filmow z roku ubieglego"<<endl;
    cout<< "6. Lista filmow, w ktorych wystepowal dany aktor"<<endl;
    cout<< "7. Aktor wystepujacy w najwiekszej liczbie filmow"<<endl;
    cout<< "0. Wyjscie"<<endl;
    cout<< "Wybierz co chcesz zrobic wpisujac numer od 1 do 0 ";
    cin>> menu;
    system("cls");

    // Aktor
    Aktor a[50];
    int id_akt;
    string nazwis;
    ofstream doaktor("aktor.txt", ios_base::app);
    ifstream zaktor("aktor.txt");
    int liczba_akt=0;

    // Film
    Film f[50];
    int id_fil, rok_prod;
    string tyt;
    ofstream dofilm("film.txt", ios_base::app);
    ifstream zfilm("film.txt");
    int liczba_fil=0;

    // Obsada
    //Obsada o[50];
    //int id_ak;
    //int id_fi;

    // zmienne
    string data, data2;
    int zmienna;

    if(zaktor.is_open()){
        for(;;){
            if(!(zaktor >> id_akt)) break;
            zaktor >> nazwis;
            Aktor Aktor(id_akt, nazwis);
            a[liczba_akt] = Aktor;
            liczba_akt++;
        }
    }

        if(zfilm.is_open()){
        for(;;){
            if(!(zfilm >> id_fil)) break;
            zfilm >> tyt;
            zfilm >> rok_prod;
            Film Film(id_fil, tyt, rok_prod);
            f[liczba_fil] = Film;
            liczba_fil++;
        }
    }

   switch(menu) {
    case 1:

            cout<<"Podaj ID oraz nazwisko aktora: "<<endl;
            cin >> id_akt;
            cin >> nazwis;

            doaktor << id_akt << " " << nazwis << endl;
            break;

        case 2:
                for (int i=0; i<liczba_akt; i++)
                {
                a[i].pokaz_aktora();
                }

        break;

        case 3:
            cout<<"Podaj ID, Tytul oraz rok produkcji: "<<endl;
            cin>>id_fil;
            cin>>tyt;
            cin>>rok_prod;

            dofilm << id_fil << " " << tyt << " " << rok_prod << endl;
        break;

        case 4:
                for (int i=0; i<liczba_fil; i++)
                {
                f[i].pokaz_film();
                }
        break;

        case 5:
                for (int i=0 ; i < liczba_fil ; i++){
                if (f[i].daj_rok()== 2016)
                    f[i].pokaz_film();
                }
        break;

        case 6:
            cin>>data;
                for (int i=0 ; i < liczba_fil; i++){
                data2 = f[i].daj_tytul();
                if (a[i].daj_nazwisko() == "daniel" )
                    f[i].pokaz_film();
                }
        break;

        case '7':
        {
            cout<<"Aktor wystepujacy w najwiekszej liczbie filmow: "<<endl;
        }
        break;


        case 0:
            exit(0);
        break;

        default: cout<<"Nie ma takiej opcji"<<endl;
    }
    getchar();getchar();
    system("cls");

}
return 0;
}


0

Sformatuj ten kod porządnie oraz porozdzielaj na funkcje, to na początek.

0
Patryk27 napisał(a):

Sformatuj ten kod porządnie oraz porozdzielaj na funkcje, to na początek.

W ten sposób? Nie wiem o co chodzi w "porozdzielaj na funkcje".

#include <iostream>
#include "class.h"
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;


int main()
{
    int menu;
    for(;;){
    cout<<endl;
    cout<<"MENU"<<endl;
    cout<< "1. Dodaj Aktora" <<endl;
    cout<< "2. Pokaz Aktora" <<endl;
    cout<< "3. Dodaj Film" <<endl;
    cout<< "4. Pokaz Film"<<endl;
    cout<< "5. Lista filmow z roku ubieglego"<<endl;
    cout<< "6. Lista filmow, w ktorych wystepowal dany aktor"<<endl;
    cout<< "7. Aktor wystepujacy w najwiekszej liczbie filmow"<<endl;
    cout<< "0. Wyjscie"<<endl;
    cout<< "Wybierz co chcesz zrobic wpisujac numer od 1 do 0 ";
    cin>> menu;
    system("cls");

// Aktor
Aktor a[50];
int id_akt;
string nazwis;
ofstream doaktor("aktor.txt", ios_base::app);
ifstream zaktor("aktor.txt");
int liczba_akt=0;

// Film
Film f[50];
int id_fil, rok_prod;
string tyt;
ofstream dofilm("film.txt", ios_base::app);
ifstream zfilm("film.txt");
int liczba_fil=0;

// Obsada
//Obsada o[50];
//int id_ak;
//int id_fi;

// zmienne
string data, data2;
int zmienna;

if(zaktor.is_open()){
    for(;;){
        if(!(zaktor >> id_akt)) break;
        zaktor >> nazwis;
        Aktor Aktor(id_akt, nazwis);
        a[liczba_akt] = Aktor;
        liczba_akt++;
        }
    }

if(zfilm.is_open()){
    for(;;){
        if(!(zfilm >> id_fil)) break;
        zfilm >> tyt;
        zfilm >> rok_prod;
        Film Film(id_fil, tyt, rok_prod);
        f[liczba_fil] = Film;
        liczba_fil++;
        }
    }

   switch(menu) {
case 1:
    cout<<"Podaj ID oraz nazwisko aktora: "<<endl;
    cin >> id_akt;
    cin >> nazwis;
    doaktor << id_akt << " " << nazwis << endl;
    break;

case 2:
    for (int i=0; i<liczba_akt; i++){
    a[i].pokaz_aktora();}
    break;

case 3:
    cout<<"Podaj ID, Tytul oraz rok produkcji: "<<endl;
    cin>>id_fil;
    cin>>tyt;
    cin>>rok_prod;
    dofilm << id_fil << " " << tyt << " " << rok_prod << endl;
    break;

case 4:
    for (int i=0; i<liczba_fil; i++){
        f[i].pokaz_film();}
        break;

case 5:
        for (int i=0 ; i < liczba_fil ; i++){
        if (f[i].daj_rok()== 2016)
        f[i].pokaz_film();}
        break;

case 6:
    cin>>data;
    for (int i=0 ; i < liczba_fil; i++){
    data2 = f[i].daj_tytul();
    if (a[i].daj_nazwisko() == "daniel" )
    f[i].pokaz_film();}
    break;

case 7:
        {
            cout<<"Aktor wystepujacy w najwiekszej liczbie filmow: "<<endl;
        }
        break;


case 0:
        exit(0);
        break;

        default: cout<<"Nie ma takiej opcji"<<endl;
    }
    getchar();getchar();
    system("cls");

}
return 0;
}


0

W ten sposób?

Nie, nie zgaduj. Masz dostęp do Google - wpisz c++ formatting i poczytaj.

Nie wiem o co chodzi w "porozdzielaj na funkcje".

Której części tego polecenia nie rozumiesz? Nie wiesz, czym są funkcje?

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