请求“x”中的成员“insert”,该成员属于非类类型

request for member ‘insert’ in ‘x’, which is of non-class type

本文关键字:成员 属于 类型 insert 请求      更新时间:2023-10-16

我有一个名为x的映射变量,它被定义为:

    std::map <std::string, std::string, std::less<std::string>,
    MyAlloc<std::pair <std::string, std::string> > >
    x (std::less<std::string> (), MyAlloc <std::pair <std::string, std::string> > ());

其中MyAlloc是我自己定义的自定义STL分配器。当我试图在地图中插入一对时,比如:

    x.insert(std::pair<std::string,std::string>("key","value"));

我得到以下错误:

    error: request for member ‘insert’ in ‘x’, which is of non-class type
   ‘std::map<std::basic_string<char>, std::basic_string<char>, 
    std::less<std::basic_string<char> >, MyAlloc<std::pair<std::basic_string<char>,
    std::basic_string<char> > > >(std::less<std::basic_string<char> > (*)(), 
    MyAlloc<std::pair<std::basic_string<char>, std::basic_string<char> > > (*)())’

如果我使用分配器的默认构造函数,比如:,我不会得到这个错误

    std::map <std::string, std::string, std::less<std::string>,MyAlloc <std::pair <std::string, std::string> > > x;

我不确定默认构造函数的初始化是否正确?

提前感谢..:)

这里要查找的关键字是"最麻烦的解析"。x的定义被解析为函数声明。维基百科有一个例子提到了完全相同的错误信息。

您定义的是函数x,而不是对象。

默认的ctor将使用相同的比较和分配器,所以请使用它。