Как в C++ создать контейнер с пользовательским типом?
не получается сделать контейнер с пользовательским типом данных.
#include "pch.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Student
{
private:
string name;
int age;
public:
Student(string Name, int Age) { name = Name; age = Age; }
friend std::ostream& operator<< (std::ostream &out, const Student &point);
};
std::ostream& operator<< (std::ostream &out, const Student &point)
{
out << point.name << ", " << to_string(point.age) << endl ;
return out;
}
int main()
{
setlocale(LC_ALL, "Russian");
vector<Student> v(3);
int i;
v[0] = Student("Иванов", 45.9);
v[1] = Student("Петров", 30.4);
v[2] = Student("Сидоров", 55.6);
cout << v[1];
Ответы (2 шт):
Автор решения: KoVadim
→ Ссылка
Давайте разберем.
Так как Вы хотите изменить размер вектора через resize(3), нужно добавить конструктор по умолчанию. Где то такой
Student() : name{""}, age{0} {}
Но можно использовать push_bach/emplace_back.
Также, возможно не хочет компилится, потому что в v[0] = Student("Иванов", 45.9); Вы передаете вещественное число, а сам возраст собственно целое. Надо согласовать.
Мой поправленный вариант
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Student
{
private:
string name;
int age;
public:
Student(string Name, int Age) { name = Name; age = Age; }
friend std::ostream& operator<< (std::ostream &out, const Student &point);
};
std::ostream& operator<< (std::ostream &out, const Student &point)
{
out << point.name << ", " << to_string(point.age) << endl ;
return out;
}
int main()
{
setlocale(LC_ALL, "Russian");
vector<Student> v;
v.emplace_back("Иванов", 45);
v.emplace_back("Петров", 30);
v.emplace_back("Сидоров", 55);
cout << v[1];
}
Автор решения: AlexGlebe
→ Ссылка
Вам нужен в классе конструктор по умолчанию.
Вы создаёте временный объект, а оператора присваивания от временного объекта в классе нет.
Возраст вы храните как целое число, а надо с точкой. Поменяйте тип age.
Так напишите:
float age ;
public:
Student():name{},age{}{}
Student & operator=(Student && s)
{name=std::move(s.name);age=std::move(s.age);
return * this; }