Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序未能编译_C++ - Fatal编程技术网

C++ 程序未能编译

C++ 程序未能编译,c++,C++,这是我的密码。我使用的是Dev-C++4.9.8.0,我不明白为什么它不能编译 #include <iostream> #include <cmath> #include <stdlib.h> using namespace std; int main() { int n; // Number to test for prime-ness int i; // Loop counter int is_prime =

这是我的密码。我使用的是Dev-C++4.9.8.0,我不明白为什么它不能编译

#include <iostream>
#include <cmath>
#include <stdlib.h>

using namespace std;

int main() {
    int  n;    // Number to test for prime-ness
    int  i;    // Loop counter
    int  is_prime = true; // Boolean flag...
                          // Assume true for now.

    // Get a number form the keyboard.

    cout << "Enter a number and press ENTER: ";
    cin >> n;

    // Test for prime by checking for divisibility 
    // by all whole numbers from 2 to sqrt(n).

    i = 2;
    while (i <= sqrt(n)) {  // While i is <= sqrt(n),
         if (n % i == 0)         // If i divides n, 
             is_prime = false;   //    n is not prime.
         i++;
 }

 // Print results

 if (is_prime)
     cout << "Number is prime." << endl;
 else
     cout << "Number is not prime." << endl;

 system("PAUSE");   
 return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
int n;//要测试素数的数字
int i;//循环计数器
int是_prime=true;//布尔标志。。。
//现在假设是真的。
//从键盘上获取一个数字。
cout>n;
//通过检查整除性来测试素数
//从2到sqrt(n)的所有整数。
i=2;

而(i这在gcc中编译得很好

虽然有些事情你可以改进,比如不包括
#include
包括
stdlib
而不是
stdlib.h
making is_prime
bool

第22行重载“sqrt(int&)”的调用不明确

尝试
sqrt(n)
sqrt((int)n)

@Andrey给出了答案:使用
::sqrt(n)
std::sqrt(n)
或包含
math.h
而不是
cmath
。最好的方法仍然是按照他的建议:不要使用
使用命名空间std;

我的建议是:切换到更主流的编译器,比如gcc、clang或visualstudio。它们更好地符合标准

我正在使用的这本书使用了Dev-C++


我不想太刻薄,但换到另一本书上。我不相信一本书会让你包括
stdlib.h
。这是C还没有标准化的时候的一个标题。所以…是的…换一本书…

正如预测的那样,这个错误是由于
std::sqrt
sqrt
之间的符号冲突造成的,原因是你r使用命名空间std;
使用

cmath
有一个名为
std::sqrt
的函数,符号名
sqrt
正在导入到您的命名空间中,因为您的
使用了命名空间std;
。即使您没有包含
math.h
,但出于某种原因,编译器也正在导入该头,并且
math
定义
sqrt
函数

编译器抱怨它不知道使用哪个
sqrt

正确的解决方案是不要使用
名称空间std;
。另请参阅:

在您的特定情况下,可以使用命名空间std;
替换为以下内容:

using std::cout;
using std::cin;
using std::endl;
为了避免总是在这些文件前面键入
std::

老实说,编译器不应该包括
math.h
,正如其他人所指出的,使用一个10年以上的编译器是愚蠢的。使用一个现代的编译器


编辑:此外,请不要再连续发表半打评论来传达多行错误消息。只需编辑您的原始帖子。

尝试发布您看到的错误消息。首先,
应该是
,或者您应该在
外部“C”中包含括号
另一方面,
使用名称空间std;
通常是一个糟糕的想法,可能会导致您描述的类型错误,因为它与
std::
中常用的符号名冲突。@Ashish
int is_prime=true;
是绝对合法的。Dev-C++4.9.8.0已有10年历史。请更新您的编译器。省略
的包含不是一个改进,而对
系统的调用仍然存在。哦,是的,很抱歉没有看到
系统
call@remyabel:实际上它是在C++11中。我知道,但我也知道符合标准的编译器不会给出这种错误。这就是为什么我说“尝试”@bolov提问者的评论表明,这不是模板,而是由于
使用名称空间std
造成的过载问题,但如果您想使用名称空间std,您可以尝试
::sqrt(n)
std::sqrt(n)
sqrt(n)
。另一种选择是根本不使用
sqrt
,这将完全消除
cmath
的需要。如果我能给你另一个+1作为关于发布错误的注释,我会的!