如何插入对多图的引用?
How to insert a reference to a multimap?
我有一个 class Foo
,其中包含一个带有 unsigned long
和 reference
到 Bar class
的多图。
我收到错误 "no matching function to call multimap, etc"。
我插入多图有什么问题?
[头文件]
class Foo
{
public:
Foo();
~Foo();
void set(const unsigned long var1, const Bar& var2);
private:
struct map_sort
{
bool operator()(const unsigned long& e1, const unsigned long& e2) const
{
return (e2 < e1);
}
};
std::multimap<unsigned long,Bar&, map_sort> m_map;
};
[源文件]
void Foo::set(const unsigned long var1, const Bar& var2)
{
m_map.insert(var1,rtime); //<-- ERROR!!!!!!!!
}
您的 multimap 成员被声明为 unsigned long
和 Bar&
std::multimap<unsigned long,Bar&, map_sort> m_map;
同时,在源文件中
void Foo::set(const unsigned long var1, const Bar& var2)
{
m_map.insert(var1,rtime); //var1 is const here! (rtime is not declared but I assume you meant var2 - which is const, too)
}
您正在尝试插入与上面声明的不同的 const unsigned long
和 const Bar&
(它们是常量)。请注意,const unsigned long
并不是真正的问题,因为它是按值复制的,因此,事实上,multimap 保留了自己的变量版本,而 "main" 则无法修改。
此外,请查看 multimap 的 insert
方法 http://www.cplusplus.com/reference/map/multimap/insert/ 的文档。您应该使用 std::pair
来插入键值对:)
解决方案 1: 更改您的方法以采用非常量参数:
void set(unsigned long var1, Bar& var2);
解决方案 2: 更改您的地图以包含常量值:
std::multimap<const unsigned long, const Bar&, map_sort> m_map
工作示例:
class Foo
{
public:
Foo();
~Foo();
void set(const unsigned long var1, const Bar& var2);
private:
struct map_sort
{
bool operator()(const unsigned long& e1, const unsigned long& e2) const
{
return (e2 < e1);
}
};
std::multimap<const unsigned long, const Bar&, map_sort> m_map;
};
void Foo::set(const unsigned long var1, const Bar& var2)
{
m_map.insert(pair<const unsigned long, const Bar&>(var1, var2));
}
我有一个 class Foo
,其中包含一个带有 unsigned long
和 reference
到 Bar class
的多图。
我收到错误 "no matching function to call multimap, etc"。
我插入多图有什么问题?
[头文件]
class Foo
{
public:
Foo();
~Foo();
void set(const unsigned long var1, const Bar& var2);
private:
struct map_sort
{
bool operator()(const unsigned long& e1, const unsigned long& e2) const
{
return (e2 < e1);
}
};
std::multimap<unsigned long,Bar&, map_sort> m_map;
};
[源文件]
void Foo::set(const unsigned long var1, const Bar& var2)
{
m_map.insert(var1,rtime); //<-- ERROR!!!!!!!!
}
您的 multimap 成员被声明为 unsigned long
和 Bar&
std::multimap<unsigned long,Bar&, map_sort> m_map;
同时,在源文件中
void Foo::set(const unsigned long var1, const Bar& var2)
{
m_map.insert(var1,rtime); //var1 is const here! (rtime is not declared but I assume you meant var2 - which is const, too)
}
您正在尝试插入与上面声明的不同的 const unsigned long
和 const Bar&
(它们是常量)。请注意,const unsigned long
并不是真正的问题,因为它是按值复制的,因此,事实上,multimap 保留了自己的变量版本,而 "main" 则无法修改。
此外,请查看 multimap 的 insert
方法 http://www.cplusplus.com/reference/map/multimap/insert/ 的文档。您应该使用 std::pair
来插入键值对:)
解决方案 1: 更改您的方法以采用非常量参数:
void set(unsigned long var1, Bar& var2);
解决方案 2: 更改您的地图以包含常量值:
std::multimap<const unsigned long, const Bar&, map_sort> m_map
工作示例:
class Foo
{
public:
Foo();
~Foo();
void set(const unsigned long var1, const Bar& var2);
private:
struct map_sort
{
bool operator()(const unsigned long& e1, const unsigned long& e2) const
{
return (e2 < e1);
}
};
std::multimap<const unsigned long, const Bar&, map_sort> m_map;
};
void Foo::set(const unsigned long var1, const Bar& var2)
{
m_map.insert(pair<const unsigned long, const Bar&>(var1, var2));
}