我对C ++还是很陌生,但是我试图创建一个映射,并从一个类中将值插入其中,但似乎总是出现错误。
class Album {
public:
map<string,string> albums;
albums.insert(make_pair("rap","Kamikaze")); // This gives the error
};
当我在主函数中放入相同的两行时,它可以正常工作。就像我说过的,我对C ++还是很陌生,所以如果它很简单,请不要烤我。(此外,我已包含地图并添加了使用命名空间std的功能)
您正在尝试在不应有代码的空间中运行代码。您可以改写
class Album {
public:
map<string,string> albums;
Album() {
albums.insert(make_pair("rap","Kamikaze"));
}
};
这将在每次实例化该类时运行代码,从而有效地使其成为albums
的默认值。
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"));
...
}
没问题,它非常简单。下面是一个类定义,您声明的映射是其公共数据成员。现在,该类将充当所有“相册”对象的原型,并且创建的所有对象将具有自己的地图成员。
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"));