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

时间:2018-04-16 10:17:27

标签: c++ windows c++11 tostring

我正在尝试使用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&#39; int karatsuba(int,int)&#39;: 7 25 C:\ Users \ AKuro \ Desktop \ C ++ \ Divide and Conquer \ karatsuba.cpp [错误]&#39; to_string&#39;未在此范围内声明

9 23 C:\ Users \ AKuro \ Desktop \ C ++ \ Divide and Conquer \ karatsuba.cpp [错误]&#39; strlen&#39;未在此范围内声明

18 29 C:\ Users \ AKuro \ Desktop \ C ++ \ Divide and Conquer \ karatsuba.cpp [错误]类型无效的操作数&#39; int&#39;和&#39; __ gnu_cxx :: __ promote_2 :: __ type {aka double}&#39;到二进制&#39;运算符%&#39;

20 29 C:\ Users \ AKuro \ Desktop \ C ++ \ Divide and Conquer \ karatsuba.cpp [错误]类型无效的操作数&#39; int&#39;和&#39; __ gnu_cxx :: __ promote_2 :: __ type {aka double}&#39;到二进制&#39;运算符%&#39;

我尝试了通过谷歌搜索找到的方法,但似乎没有一种方法可行。这是我已经尝试过的:

将std与to_string一起使用为std :: to_string

我甚至尝试过这种方法

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

但似乎没有工作,我无法找到这个特定环境的任何答案(Windows 10 + Devcpp)。这真的让我烦恼。如果你能帮助我,请。

1 个答案:

答案 0 :(得分:1)

这里有多个错误:

1)to_string()c++11 feature。因此,请确保在makefile或IDE中设置-std = c ++ 11。

2)strlen()声明cstring,而非string。更好的方法是使用int len_x = sx.size();之类的东西,和其他字符串相似。

3)pow()的返回类型为float or double。所以你需要像这样明确地施展它:int b = x % static_cast<int>(pow(10, n_by_2));。您需要对使用pow()并将结果分配给int变量的所有表达式执行此操作。实际上,甚至比铸造更好的是编写你自己的简单intpow()函数,这并不难做(这很简单,标准似乎已经跳过它:-))。