gpt4 book ai didi

c++ - 在C++中递归地从十进制到八进制。以std::string格式输出

转载 作者:行者123 更新时间:2023-12-02 10:39:17 24 4
gpt4 key购买 nike

我正在尝试在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);

错误中的关键字是 overloadedambiguous,当然还有函数本身。
当您了解这些词在C++上下文中的含义时,您将了解错误的原因。

然后,您可以采用以下方法之一:
  • 将函数的名称从to_string更改为类似my_to_string。这是幼稚的方法。
  • 避免在全局范围甚至全局范围内导入所有std命名空间
    函数范围,并从现在开始遵循std::function的用法。
  • 关于c++ - 在C++中递归地从十进制到八进制。以std::string格式输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859782/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com