Использование вектора и классов - PullRequest
1 голос
/ 08 мая 2020

У меня проблема, которая может показаться вам простой, но я не могу ее понять, хотя я очень старался.

#include <iostream>
#include <string>
#include <vector>

//Functions Prototypes ---
void create_object(std::vector <Movie> &);
std::string set_name();
int set_ryear();
double set_rating();

//Classes ---
class Movie {
public:
    std::string name;
    int release_year;
    double rating;
public:
    //Constructors
    Movie(std::string u_name, int u_release_year, double u_rating);
    ~Movie() {};
    Movie(const Movie &);
};


//MAIN ---
int main() {
    std::vector <Movie> Collection;
    create_object(Collection);

    return 0;
}

//Constructors ---
Movie::Movie(std::string u_name, int u_release_year, double u_rating)
    :name{ u_name }, release_year{ u_release_year }, rating{ u_rating }{

}

//Stand-Alone Functions ---
char get_selection() {
    char x;
    std::cin >> x;
    return x;
}

void create_object(std::vector <Movie> &x) {
    std::string u_name = set_name();
    int u_ryear = set_ryear();
    double u_rating = set_rating();

    Movie User_Movie{ u_name,u_ryear,u_rating };
}

std::string set_name() {
    std::string x;

    std::cout << "Name: ";
    std::cin >> x;

    return x;
}

int set_ryear() {
    int x;

    std::cout << "Release year: ";
    std::cin >> x;

    return x;
}

double set_rating() {
    double x;
    std::cout << "Rating: ";
    std::cin >> x;

    return x;
}

Я только новичок, поэтому мало что знаю , но насколько я знаю, классы должны быть типами, даже если они являются определяемыми пользователем типами, и они должны давать возможность манипулировать ими как примитивными типами.

Итак, почему, когда я пытаюсь создать вектор, который ожидает кучу типов Movie, или когда я передаю его по ссылке, я получаю ошибки? передать его им, как я хочу, и выполнять операции с его объектами (например, после создания нового объекта я хочу иметь возможность добавить его в коллекцию, используя push_back() и все такое) после создания системы меню, используя switch.

1 Ответ

2 голосов
/ 08 мая 2020

Вы не объявили класс Movie к тому моменту, когда дойдете до этого оператора:

void create_object(std::vector <Movie> &);

правильный способ создания классов C ++ - это поместить базовый c объявление в отдельном файле movie.h, а затем #include его в вашем коде в начале.

Если вы не можете этого сделать (хотя действительно должны), переместите объявление класса в начало файла.

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