Как сделать вектор классов на C ++? - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь создать вектор, в котором хранятся города и их часовые пояса.

Я объявил класс City и хочу вывести cityName каждого City в векторе.

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

class City
{
    public:
        string cityName;
        char countryIso1;
        char countryIso2;
        int offset;
        City(string aCityName, char aCountryIso1, char aCountryIso2, int aOffset) {
            cityName = aCityName;
            countryIso1 = aCountryIso1;
            countryIso2 = aCountryIso2;
            offset = aOffset;
        }
};



vector<City> cities = {
    {"Abidjan", 'C', 'I', 0},
    {"Lagos", 'N', 'G', 60}
};

/* ---------- MAIN ---------- */
int main() {
    for (int i = 0; i < cities.size(); i++)
    {
        cout << cities[i].cityName << endl;
    }
    
    return 0;
}

Ошибка в терминале:

error: non-aggregate type 'vector<City>' cannot be initialized
      with an initializer list
vector<City> cities = {
             ^        ~

Ответы [ 2 ]

4 голосов
/ 01 августа 2020

sizeof(cities) неверно. Это возвращает размер данных, которые занимает весь ваш массив, а не количество элементов в вашем массиве. Измените его на sizeof(cities) / sizeof(cities[0])

Подробнее здесь

Отредактировано, чтобы добавить исправление:

int main() {
    for (int i = 0; i < sizeof(cities) / sizeof(cities[0]); i++)
    {
        cout << cities[i].cityName << endl;
    }
    
    return 0;
}
1 голос
/ 01 августа 2020

В C ++ всегда лучше использовать контейнер vector или array вместо необработанных массивов:

Вот как я бы использовал контейнер Array:

std::array<City,3> arr_of_cities;

Вот как я бы использовал контейнер Vector:

std::vector<City> vec_of_cities;

Добавление элементов:

vec_of_container.push_back(<City object>);

Доступ к элементам:

vec_of_containers.at(<index>);  
or  
vec_of_container[<index>]; //the first one is better though 

( То же для контейнера массива)

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