Причудливая проблема при заполнении списка объектами в C ++? - PullRequest
0 голосов
/ 09 октября 2018

Я создал класс Patient, и я хочу заполнить список Patients объектами, которые я создал через явный constrctor.Однако я получаю сообщение об ошибке Type name is not allowed, когда пытаюсь заполнить list<Patient> с помощью `= {} (список инициализатора).Я хотел бы спросить, что я делаю не так?

#include "pch.h"
#include <iostream>
#include <string>
#include <list>
using namespace std;
class Patient {
    string name;
    string birthday;
    int visits;
    public:
    Patient(string n, string b, int v) {
        name = n;
        birthday = b;
        visits = v;
    }

};
list<Patient> sp = {
Patient a("I.Petrov", "21.12.02", 4),
Patient b("D.Stoyanov", "12.02.97", 7),
Patient c("K.Dimitrov", "07.08.90", 1)
};

int main()
{



    return 0;
}

1 Ответ

0 голосов
/ 09 октября 2018

Инициализатор списка принимает последовательность выражений, но вместо этого вы дали ей полные объявления переменных.Это просто неверный синтаксис.Вы можете размещать объявления только в «свободном пространстве» в функции или в области пространства имен, но не внутри другого оператора (для целей этого ответа мы проигнорируем радости условных выражений).

Вы, вероятно, намеревались создатьвместо этого некоторые временные:

list<Patient> sp = {
   Patient("I.Petrov", "21.12.02", 4),
   Patient("D.Stoyanov", "12.02.97", 7),
   Patient("K.Dimitrov", "07.08.90", 1)
};

Но я бы написал это как:

std::list<Patient> sp{
   {"I.Petrov",   "21.12.02", 4},
   {"D.Stoyanov", "12.02.97", 7},
   {"K.Dimitrov", "07.08.90", 1}
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...