c ++ to_string未在此范围错误 [Windows + Devcpp 环境] 中声明

c++ to_string was not declared in this scope error [Windows + Devcpp environment]

本文关键字:Windows Devcpp 环境 声明 错误 范围 to string      更新时间:2023-10-16

我正在尝试使用Devcpp ide在Windows 10上的c ++中实现Karatsuba乘法算法。这是相同的代码:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int karatsuba(int x, int y){
string sx = to_string(x);
string sy = to_string(y);
int len_x = strlen(sx);
int len_y = strlen(sy);
if (len_x == 1 && len_y == 1)
return x * y;
else{
int n = max(len_x, len_y);
int n_by_2 = n / 2;
int a = x / pow(10, n_by_2);
int b = x % pow(10, n_by_2);
int c = y / pow(10, n_by_2);
int d = y % pow(10, n_by_2);
int ac = karatsuba(a, c);
int bd = karatsuba(b, d);
int ad_plus_bc = karatsuba(a+b, c+d);
int prod = ac * pow(10, n_by_2) + (ad_plus_bc * pow(10, n_by_2)) + bd;
return prod;
}
}
int main(){
cout<<karatsuba(45, 45);
}

当我运行这个程序时,我收到以下错误:

C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp In function 'int karatsuba(int, int)': 7 25 C:\用户\AKuro\桌面\C++\分而治之\卡拉苏巴.cpp [错误] "to_string"未在此范围内声明

9 23 C:\用户\AKuro\桌面\C++\分而治之\卡拉苏巴.cpp [错误] 在此范围内未声明"strlen">

18 29 C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp [错误] 类型为 'int' 和 '__gnu_cxx::__promote_2:::__type {aka double}' 的无效操作数变为二进制 'operator%'

20 29 C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp [错误] 类型"int"和"__gnu_cxx::__promote_2:::__type {aka double}"到二进制"运算符%"的操作数无效

我尝试了通过谷歌搜索找到的方法,但似乎都没有奏效。这是我已经尝试过的:

将 STD 与 to_string 如 std::to_string

我什至尝试过这种方法

int i = 1212;
stringstream ss;
ss << i;
string s=ss.str();

但似乎都不起作用,我找不到这个特定环境(Windows 10 + Devcpp)的任何答案。这真的一直困扰着我。如果你能帮我,请。

这里有多个错误:

1)to_string()是 C++11 的一个特性。因此,请确保在生成文件或 IDE 中设置 -std=c++11。

2)strlen()是用cstring声明的,而不是string。这里更好的方法是使用类似int len_x = sx.size();的东西,并且对另一个字符串使用类似的东西。

3)返回pow()类型为浮点型或双倍型。所以你需要像这样巧妙地投射它:int b = x % static_cast<int>(pow(10, n_by_2));.您需要对所有使用pow()并将结果分配给int变量的表达式执行此操作。实际上,比强制转换更好的是编写自己的简单intpow()函数,这并不难做到(它是如此简单,以至于标准似乎跳过了它:-))。