我很难理解代码的这一部分?是否可以获得图片/图解说明。
//test.h
typedef std::map<std::string, std::string> mType;
static const m_Type::value_type data[] = {
m_Type::value_type("A", "B"),
m_Type::value_type("C", "D"),
m_Type::value_type("E", "F")
};
//test.cc
void test(std::map<std::string, std::string>::value_type data)
{
cout<<data[0].first<<endl;
}
//main.cc
test(data);
在main.cc中我想调用test()来打印元素但是会出错
main.cc: In function 'void test(std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)':
main.cc:10: error: no match for 'operator[]' in 'data[0]'
答案 0 :(得分:1)
您必须按以下方式声明该功能
void test( const std::map<std::string, std::string>::value_type data[] )
{
cout<<data[0].first<<endl;
}
因为原始数据被定义为您要传递给函数的数组。否则,您可能不会使用下标运算符。
此外,您还需要使用限定符const
作为参数,因为数组数据也被定义为常量数组。
至于这种类型
m_Type::value_type
然后它相当于std::pair<const std::string, std::string>
所以这个声明
static const m_Type::value_type data[] = { /*...*/ };
相当于
static const std::pair<const std::string, std::string> data[] = { /*...*/ };
答案 1 :(得分:0)
你应该通过测试value_type
而不是整个地图。
value_type对应一对(键,值),并在stdlib中定义如下:typedef pair<const Key, Type> value_type;
因此data[0]
毫无意义。应为data.first