C++ STL用string类的时候 编译器提示 error: no viable overloaded '=',等于号不能重载

关键代码就是那句赋值

    ...

  if(s1_len > s2_len)
    for(int i = 1; i <= s1_len - s2_len; i++)
      s2 = '0' + s2;

    ...

然后编译器报错:main.cpp:41:10: error: no viable overloaded '=' s2 = s2 + "0"; ~~ ^ ~~~~~~~~ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1330:19: note: candidate function not viable: 'this' argument has type 'const string' (aka 'const basic_string<char, char_traits<char>, allocator<char> >'), but method is not marked const basic_string& operator=(const basic_string& __str); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1337:45: note: candidate function not viable: 'this' argument has type 'const string' (aka 'const basic_string<char, char_traits<char>, allocator<char> >'), but method is not marked const _LIBCPP_INLINE_VISIBILITY basic_string& operator=(const value_type* __s) {return assign(__s);} ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1338:19: note: candidate function not viable: 'this' argument has type 'const string' (aka 'const basic_string<char, char_traits<char>, allocator<char> >'), but method is not marked const basic_string& operator=(value_type __c); ^
我用的是Xcode的terminal-tools里的g++编译

阅读 33.9k
2 个回答

本来就没有operator+(char, const std::string&)这个重载。
改成s2 = "0" + s2

可能以下才是更关键的错误信息

note: candidate function not viable: 'this' argument has type 'const
string' (aka 'const basic_string<char, char_traits,
allocator >'), but method is not marked const basic_string&
operator=(const basic_string& __str);

我猜你的 s2 是个 const 变量. 或者 s2 是个成员变量, 但你的函数是 const 成员函数.

推荐问题