#include <iostream>
#include <cstring>
using namespace std;

class Film {
private:
    string name;
    int year_prod;
    string producer;
    string main_actor;

public:
    Film();
    void print()
    {
        cout << "\nThe name of movie: " << name;
        cout << "\nThe year of produced: " << year_prod;
        cout << "\nProducer: " << producer;
        cout << "\nMain actor: " << main_actor << endl;
    }
    void SetName(string xName)
    {
       name = xName;
    }

    string GetName()
    {
       return name;
    }

    void SetYearP(int xYearP)
    {
        year_prod = xYearP;
    }

    int GetYearP()
    {
        return year_prod;
    }

    void SetProducer(string xProducer)
    {
        producer = xProducer;
    }

    string GetProducer()
    {
        return producer;
    }

    void SetMaina(string xMaina)
    {
        main_actor = xMaina;
    }

    string GetMaina()
    {
        return main_actor;
    }


};


int main()
{
    Film obs[100]; // maximum of 100 hundred films
    int n;
    cout << "how many films ";
    cin >> n;
    for (int i = 0; i < n; ++i)
    {
        string name;
        int year;
        string prod;
        string actor;
        cout << "enter the film name ";
        cin >> name;
        cout << "enter the production year ";
        cin >> year;
        cout << "enter the producer name ";
        cin >> prod;
        cout << "enter the actor name ";
        cin >> actor;
        obs[i].SetName(name);
        obs[i].SetYearP(year);
        obs[i].SetProducer(prod);
        obs[i].SetMaina(actor);
    }
} 

J'ai fait la moitié de mon code mais j'obtiens des erreurs lors de la compilation en disant: symbole externe non résolu "public: __thiscall Film :: Film (void)" (?? 0Film @@ QAE @ XZ) référencé dans la fonction _main ET 1 externe non résolu. Je ne sais pas si j'avais de la bonne manière des objets de n Film à partir de l'entrée utilisateur car je suis encore un débutant en POO.

0
user13204336 3 avril 2020 à 13:49

3 réponses

Meilleure réponse

Veuillez essayer ceci. J'espère que cela t'aides.

class Film {
...
...
...
public:
        //Film(); Remove this line if you are not defining Film()
        void print()
        {
            cout << "\nThe name of movie: " << name;
            cout << "\nThe year of produced: " << year_prod;
            cout << "\nProducer: " << producer;
            cout << "\nMain actor: " << main_actor << endl;
        }
...
...
...
}

Si vous voulez que ce soit un constructeur par défaut, ajoutez un bloc vide Film(){}

0
Mohammed Shabeer kp 3 avril 2020 à 11:18

Vous devez implémenter le constructeur de votre classe. Le constructeur est la méthode qui crée une instance de la classe. Les fonctions set ont pour but de modifier les attributs d'un objet, mais l'initialisation des attributs doit se faire dans le constructeur.

Par exemple:

public:
  //default constructor: it does not take 
  //anything as input, it sets name as an 
  //empty string and the year to 1900
  Film(){
    name = "";
    year = 1900;
  }
  // It creates a Film object, whose name 
  // is NAME and whose year is YEAR
  Film(string NAME, int YEAR){
    name = NAME;
    year = YEAR;
  }

// set function which allows to modify the 
// year of a Film object.
void setYear(int newYear){
  year = newYear;
}

Jetez un œil ici pour une introduction rapide.

EDIT: vous pouvez définir le constructeur par défaut comme

Film(){};

De cette façon, vous devez invoquer toutes les fonctions set pour initialiser ses attributs.

0
Eddymage 3 avril 2020 à 11:16

Vous n'avez pas implémenté votre constructeur:

public:
    Film();//<-- declared, but not defined.

Si vous ne voulez pas que votre constructeur fasse quoi que ce soit, ajoutez simplement un corps vide:

public:
    Film() {};

Ou mieux encore, déclarez-le explicitement comme constructeur par défaut:

public:
    Film()=default;
1
melk 3 avril 2020 à 10:57