【问题标题】:c++ to_string was not declared in this scope error [Windows + Devcpp environment]c++ to_string 未在此范围内声明错误[Windows + Devcpp 环境]
【发布时间】:2018-09-26 01:09:49
【问题描述】:

我正在尝试使用 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}' 类型的无效操作数到二进制 '运算符%'

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)。它一直困扰着我。请帮帮我。

【问题讨论】:

  • 您是否在 IDE 中设置了 -std=c++11?
  • 您使用什么编译器选项? “似乎没有工作”(任何错误)到底是什么意思?
  • std::string.size() 函数,使用它而不是 strlen (仅适用于字符串文字:“qwe”)
  • 启用c++11
  • ... 或者最好只使用sx.length()

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


【解决方案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&lt;int&gt;(pow(10, n_by_2));。您需要对所有使用 pow() 的表达式执行此操作,并将结果分配给 int 变量。实际上,比强制转换更好的是编写自己的简单 intpow() 函数,这并不难(它是如此简单以至于标准似乎已跳过它:-))。

【讨论】:

  • 谢谢你,这真的帮了我很大的忙……为此苦苦挣扎了好一阵子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
相关资源
最近更新 更多