1

我有一个名为 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;

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

提前致谢 .. :)

4

2 回答 2

2

此处要查找的关键字是“最令人烦恼的解析”。的定义x被解析为函数声明。Wikipedia 有一个示例,其中提到了完全相同的错误消息。

于 2013-09-03T07:05:34.007 回答
0

您已经定义了一个函数x,而不是一个对象。

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

于 2013-09-03T06:53:17.677 回答