没有与参数列表匹配的重载函数问题
先看问题代码:
#include<iostream>
#include<map>
#include<iterator>
#include<Windows.h>
#include<string>
using namespace std;
struct ptrCmp{
bool operator()( const char * s1, const char * s2 ) const
{
return strcmp( s1, s2 ) < 0;
}
};
struct Cstring_less{
bool operator()(const char* p,const char* q) const
{
return strcmp(p,q)<0;
}
};
void f(map<char*,int,Cstring_less>&m,multimap<char*,int,Cstring_less>&mm)
{
m.insert(make_pair("x",4));
m.insert(make_pair("x",5));
mm.insert(make_pair("x",4));
mm.insert(make_pair("x",5));
}
int main()
{
map<char*,int,Cstring_less>m;
multimap<char*,int,Cstring_less>mm;
f(m,mm);
map<char *, int, Cstring_less> mapStr;
char c_s[]= "abc";
char c_s1[] = "ab";
mapStr.insert(make_pair(c_s,1));
mapStr.insert(make_pair(c_s,3));
mapStr.insert(make_pair(c_s1,3));
map<char *, int, Cstring_less>::const_iterator c_t;
for(c_t = mapStr.begin();c_t != mapStr.end();c_t++)
cout<<c_t->first<<" "<<c_t->second<<endl;
system("PAUSE");
return 0;
}
错误出现的地方和错误提示如下:
从上面的代码可以看出使用char c_s[]= "abc"把c_s变量传给map就可以。与此同时,变成const char c_s[]= "abc"它们报的错是一样的。如下:
从上面的分析来看,直接用"123"传值给map之所以会报错,是因为"123"存放在常量区,是const值;而char c_s[] = "123"存放在栈区吗?