Ошибка при попытке создать карту вне основной функции. C ++ - PullRequest
0 голосов
/ 14 апреля 2020

Я очень новичок в C ++, но я пытаюсь создать карту и вставить в нее значения из класса, но, похоже, получаю сообщение об ошибке.

class Album {
public:
    map<string,string> albums;
    albums.insert(make_pair("rap","Kamikaze")); // This gives the error
};

, когда я ставлю те же две строки внутри основной функции, это работает без проблем. Как я уже сказал, я очень новичок в C ++, поэтому, пожалуйста, не жарите меня, если это что-то простое. (Также у меня есть карта и добавлено пространство имен std)

Ответы [ 3 ]

2 голосов
/ 14 апреля 2020

Вы пытаетесь запустить код в пространстве, где код не должен быть. Вместо этого вы можете написать

class Album {
public:
    map<string,string> albums;

    Album() {
        albums.insert(make_pair("rap","Kamikaze"));
    }
};

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

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

Нет проблем, все очень просто. Ниже приведено определение класса, а карта, которую вы объявили, является членом данных publi c. Теперь этот класс будет выступать в качестве прототипа для всех объектов «Альбом», и у всех созданных объектов будет свой собственный элемент карты.

class Album {
public:
    map<string,string> albums;

};

Рассмотрим пример ниже,

    Album objA; //Object of Album class is created here

   //Map being a public member can directly be accessed here
    ObjA.albums.insert(make_pair("some", "Thing")); 

Так что вместо Для вызова функции вставки в определении класса вам нужно сделать это следующим образом.

Аналогично для объекта B,

 ObjB.albums.insert(make_pair("some", "Thing")); 
0 голосов
/ 14 апреля 2020

Класс не является функцией. Тело класса может содержать только объявления. Исполняемый код может быть только в функциях (включая методы класса). Например:

class Album {
public:
    map<string,string> albums;
    void add_album(string a, string b) {
        albums.insert(make_pair(a, b));
        // or: albums.emplace(a, b); // if supported
    }
};
...
int main() {
...
    Album my_album;
    my_album.add_album("rap", "Kamikaze");
    my_album.albums.insert(make_pair("some", "Thing"));
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...