尝试在主函数之外创建地图时出错。 C ++

问题描述 投票:0回答:3

我对C ++还是很陌生,但是我试图创建一个映射,并从一个类中将值插入其中,但似乎总是出现错误。

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

当我在主函数中放入相同的两行时,它可以正常工作。就像我说过的,我对C ++还是很陌生,所以如果它很简单,请不要烤我。(此外,我已包含地图并添加了使用命名空间std的功能)

c++ maps
3个回答
0
投票

您正在尝试在不应有代码的空间中运行代码。您可以改写

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

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

这将在每次实例化该类时运行代码,从而有效地使其成为albums的默认值。


0
投票

Class不是函数。类主体只能包含声明。可执行代码只能在函数(包括类方法)中。例如:

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
投票

没问题,它非常简单。下面是一个类定义,您声明的映射是其公共数据成员。现在,该类将充当所有“相册”对象的原型,并且创建的所有对象将具有自己的地图成员。

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")); 
© www.soinside.com 2019 - 2024. All rights reserved.