我正在尝试在C++中递归地将整数十进制为八进制字符串。我尝试了以下代码,但没有成功。帮助程序函数本身to_string工作正常。问题似乎出在递归函数调用中。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string to_string(long num)
{
ostringstream os;
os << num;
return os.str();
}
string dec_2_oct(long dec)
{
if (dec == 0)
{
string s = "";
return s;
}
return dec_2_oct(dec / 8) + to_string(dec % 8);
}
int main() {
long dec;
cin >> dec;
string s;
s = dec_2_oct(dec);
cout << s;
}
我遇到了非常讨厌的错误。
Compiling failed with exitcode 1, compiler output:
prog.cpp: In function 'std::__cxx11::string dec_2_oct(long int)':
prog.cpp:21:50: error: call of overloaded 'to_string(long int)' is ambiguous
return dec_2_oct(dec / 8) + to_string(dec % 8);
^
prog.cpp:6:8: note: candidate: std::__cxx11::string to_string(long int)
string to_string(long num)
^~~~~~~~~
In file included from /usr/include/c++/7/string:52:0,
from /usr/include/c++/7/bits/locale_classes.h:40,
from /usr/include/c++/7/bits/ios_base.h:41,
from /usr/include/c++/7/ios:42,
from /usr/include/c++/7/ostream:38,
from /usr/include/c++/7/iostream:39,
from prog.cpp:1:
/usr/include/c++/7/bits/basic_string.h:6264:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long double)
to_string(long double __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6255:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(double)
to_string(double __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6246:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(float)
to_string(float __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6240:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long long unsigned int)
to_string(unsigned long long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6234:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long long int)
to_string(long long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6228:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long unsigned int)
to_string(unsigned long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6223:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long int)
to_string(long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6217:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(unsigned int)
to_string(unsigned __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6212:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(int)
to_string(int __val)
^~~~~~~~~
任何帮助将不胜感激!
尝试理解错误:
Compiling failed with exitcode 1, compiler output:
prog.cpp: In function 'std::__cxx11::string dec_2_oct(long int)':
prog.cpp:21:50: error: call of overloaded 'to_string(long int)' is ambiguous
return dec_2_oct(dec / 8) + to_string(dec % 8);
错误中的关键字是overloaded
,ambiguous
当然还有函数本身。 当您在上下文中理解这些单词的含义C++时,您将了解错误的原因。
然后,您可以采用以下方法之一:
- 将函数的名称从
to_string
更改为类似my_to_string
.这是幼稚的做法。 - 避免在全局范围内导入所有
std
命名空间,甚至 函数范围,并从现在开始遵循std::function
的用法。