Ошибки при компиляции при чтении массива объектов - PullRequest
0 голосов
/ 03 апреля 2020
#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);
    }
} 

Я выполнил половину своего кода, но я получаю ошибки при компиляции, говоря: неразрешенный внешний символ "publi c: __thiscall Film :: Film (void)" (?? 0Film @@ QAE@XZ) ссылка на функцию _main И 1 неразрешенная внешность. Я не уверен, правильно ли у меня были объекты n Film из пользовательского ввода, потому что я все еще новичок в OOP.

Ответы [ 3 ]

1 голос
/ 03 апреля 2020

Вы не реализовали свой конструктор:

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

Если вы не хотите, чтобы ваш конструктор что-либо делал, просто добавьте пустое тело:

public:
    Film() {};

или даже лучше , явно объявить его как конструктор по умолчанию:

public:
    Film()=default;
0 голосов
/ 03 апреля 2020

Вы должны реализовать конструктор для вашего класса. Конструктор - это метод, который создает экземпляр класса. Функции набора имеют целью модифицировать атрибуты объекта, но инициализация атрибутов должна выполняться в конструкторе.

Например:

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;
}

Посмотрите здесь для быстрого ознакомления.

РЕДАКТИРОВАТЬ: вы можете установить конструктор по умолчанию как

Film(){};

Таким образом, вы должны вызвать все функции набора для инициализации его атрибуты.

0 голосов
/ 03 апреля 2020

Пожалуйста, попробуйте это. Надеюсь, это поможет.

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;
        }
...
...
...
}

Если вы хотите, чтобы он был конструктором по умолчанию, добавьте пустой блок Film(){}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...