Je suis très nouveau en C ++ mais j'essaie de créer une carte et d'y insérer des valeurs à partir d'une classe mais je semble continuer à recevoir une erreur.

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

Quand je mets ces deux mêmes lignes dans la fonction principale, cela fonctionne sans problème. Comme je l'ai dit, je suis très nouveau en C ++, alors ne me rôtissez pas si c'est quelque chose de simple. (De plus, j'ai une carte incluse et l'utilisation de l'espace de noms std a été ajoutée)

0
Jake 14 avril 2020 à 23:52

3 réponses

Meilleure réponse

Vous essayez d'exécuter du code dans un espace où le code n'est pas censé être. Vous pouvez plutôt écrire

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

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

Cela exécutera le code à chaque fois que la classe est instanciée, ce qui en fait la valeur par défaut pour albums.

2
Hunter Land 14 avril 2020 à 20:58

Pas de problème c'est très simple. Vous trouverez ci-dessous une définition de classe et une carte que vous avez déclarée être son membre de données publiques. Maintenant, cette classe agira comme un prototype pour tous les objets "Album" et tous les objets créés auront leur propre membre de carte.

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

};

Considérez l'exemple ci-dessous,

    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")); 

Donc, au lieu d'appeler la fonction d'insertion dans la définition de classe, vous devez le faire de cette façon.

De même pour objectB,

 ObjB.albums.insert(make_pair("some", "Thing")); 
0
D.Malim 14 avril 2020 à 21:08

La classe n'est pas une fonction. Le corps de la classe ne peut contenir que des déclarations. Le code exécutable ne peut être que dans les fonctions (y compris les méthodes de classe). Par exemple:

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"));
...
}
0
numzero 14 avril 2020 à 20:57