繁体   English   中英

在此作用域错误中未声明c ++ to_string [Windows + Devcpp环境]

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

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

9 23 C:\\ Users \\ AKuro \\ Desktop \\ C ++ \\ Divide and Conquer \\ karatsuba.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}'的无效操作数对二进制'operator%'

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

将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的功能 因此,请确保在makefile或IDE中设置-std = c ++ 11。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM