我想在一个类中定义一个静态映射,该映射将具有作为键和值的结构。我已经读到需要定义'<'运算符,因此,我将该定义包含在结构本身中(我已经对其进行了随机定义,因为我在任何地方都不需要任何比较在我的程序中。)
下面的示例代码无法编译。编译器会产生很多警告和错误,我现在还不了解。 (请忽略主函数中的未初始化值):
@PowerMockIgnore("javax.management.*")
@RunWith(PowerMockRunner.class)
@PrepareForTest({SQLJConnectionBase.class})
编译器输出
#include<string>
#include<iostream>
#include<map>
using namespace std;
struct RJNodeAddress
{
string m_ip;
string m_port;
bool operator<(const RJNodeAddress &l)
{
int l_size=l.m_ip.size();
int r_size=l.m_port.size();
return (l_size < r_size);
}
};
struct RJNodeDetails
{
string m_NodeType;
int m_appId;
};
class RJWebsocket
{
public:
static map<RJNodeAddress,RJNodeDetails> m_Nodes;
};
int main()
{
RJNodeAddress l_node;
RJNodeDetails l_nodeDetails = RJWebsocket::m_Nodes[l_node];
}
答案 0 :(得分:4)
由于std::map
中的键是const,因此您的operator<
方法也必须是const:
bool operator<(const RJNodeAddress &l) const
// ^ here
无论如何它都应该是const,因为它不会修改对象,但是在这种情况下丢失它会导致编译错误。