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

Error trying to create map outside of main function. C++

我是 C++ 的新手,但我正在尝试创建一个映射并从 class 向其中插入值,但似乎总是出现错误。

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

当我将相同的两行代码放入主函数中时,它可以正常工作。就像我说的,我是 C++ 的新手,所以如果它很简单,请不要责备我。 (此外,我已经包含地图并添加了使用命名空间标准)

Class 不是函数。 Class 正文只能包含声明。可执行代码只能在函数中(包括 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"));
...
}

您正在尝试 运行 在 space 不应该有代码的地方编写代码。您可以改写

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

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

每次实例化 class 时都会 运行 代码,有效地使其成为 albums 的默认值。

没问题,非常简单。下面是一个 class 定义,您声明的映射是它的 public 数据成员。 现在这个 Class 将充当所有 "Album" 对象的原型,所有创建的对象都将有自己的映射成员。

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

因此,您需要这样做,而不是在 class 定义中调用插入函数。

与对象 B 类似,

 ObjB.albums.insert(make_pair("some", "Thing"));