no matching function for call to ‘std::basic_string ::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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM