首页 > 代码库 > no matching function for call to ‘std::basic_string<char>::assign(std::string&, int)

no matching function for call to ‘std::basic_string<char>::assign(std::string&, int)

使用string中的assign赋值函数报错,代码为:

text0.assign(line,i+1);
其中text0与line都为string类型

最后发现assign函数的原型为

string &assign(const char *s,int n);

将代码改为以下即可

text0.assign(line.c_str(),i+1);

 

附  assign函数

string &operator=(const string &s);//把字符串s赋给当前字符串
string &assign(const char *s);//用c类型字符串s赋值
string &assign(const char *s,int n);//用c字符串s开始的n个字符赋值
string &assign(const string &s);//把字符串s赋给当前字符串
string &assign(int n,char c);//用n个字符c赋值给当前字符串
string &assign(const string &s,int start,int n);//把字符串s中从start开始的n个字符赋给当前字符串
string &assign(const_iterator first,const_itertor last);//把first和last迭代器之间的部分赋给字符串

及  char*、char[]与string转换方式

1.  string --> char *

char *     =    string.c_str;

2.  char * --> string 

//可以直接赋值。

string s;
char *p = "abcdef";
s = p;

不过,变为string后使用printf输出会出现问题,用cout没有问题。是因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。

3. string --> char[]

不可直接赋值,使用循环赋值

    string pp = "dagah";
    char p[8];
    int i;
    for( i=0;i<pp.length();i++)
        p[i] = pp[i];
    p[i] = \0;
    printf("%s\n",p);
    cout<<p;

4.  char[] --> string

可以直接赋值,但会出现2中的问题

 

参考:  http://blog.csdn.net/cogbee/article/details/8931838

no matching function for call to ‘std::basic_string<char>::assign(std::string&, int)