C++编写3到300质数查找代码报operator+不匹配错误如何解决
问题原因分析
- 直接触发编译报错的核心原因:你代码中
prime = prime + i + " ";这行尝试直接对std::string类型变量和int类型变量执行+运算,C++标准库没有提供对应运算符重载,因此编译器抛出no match for 'operator+'的错误。 - 除此之外你的代码还存在两处隐含编译问题:
- 缺少依赖头文件:使用
std::string需要引入<string>头文件,使用std::cout需要引入<iostream>头文件 - 未指定标准库命名空间:你代码中直接写的
string、cout都属于std命名空间下的组件,要么在使用前加std::前缀,要么在代码开头加using namespace std;声明。
- 缺少依赖头文件:使用
修复方案
将int类型的i通过std::to_string方法转为字符串类型后再做拼接,同时补全头文件和命名空间声明即可,修复后完整代码如下:
#include <iostream> #include <string> int main() { int i = 0; int num = 0; std::string prime = ""; for (i = 3; i <= 300; i++) { int counter = 0; for (num = i; num >= 1; num--) { if (i % num == 0) { counter = counter + 1; } } if (counter == 2) { // 转换int为string后再拼接 prime = prime + std::to_string(i) + " "; } } std::cout << "Prime numbers: "; std::cout << prime; return 0; }
可选优化提示
你的质数判断逻辑可以优化,内层循环不需要遍历到1,仅需要遍历到sqrt(i)即可,可大幅降低不必要的计算量,该优化不影响编译正确性,仅提升运行效率。
内容的提问来源于stack exchange,提问作者NgPh
相关产品推荐
相关产品推荐

