srand(time(NULL))“函数'srand'无法解析。”

时间:2013-06-11 05:14:44

标签: c++ srand

我一直试图调试这个问题一段时间,老实说,我只是看不出我做错了什么。

为什么会出现语法错误?

#include <iostream>;
#include <time.h>;
#include <stdio.h>;
#include <stdlib.h>;
using namespace std;


class Problem3 {
    public:
        bool isPrime(long double num) {
            srand(time(NULL));
            return 0;
        }
};

我得到的错误是,

  

“功能'srand'无法解决。”

  • 我很清楚,现在我在“包含”陈述之后不需要分号
  • 我正在使用Eclipse CDT和MinGW作为我的编译器

我如何解决问题:

它与我正在使用的MinGW编译器有关。切换到Visual Studio解决了这个问题。

3 个答案:

答案 0 :(得分:4)

;指令末尾的

#include是代码中的问题。与#include语句不同,C++指令最终不需要(确实放错)分号。

[Warning] extra tokens at end of #include directive [enabled by default] 

似乎指令中>之后的任何字符都会导致此错误/警告。

          #include<iostream>a   //error

更改为:

#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;


class Problem3 {
    public:
        bool isPrime(long double num) {
            srand(time(NULL));
            return 0;
        }
};

int main(){
    cout<<"Hello Main";
}

修改

关于链接器问题:

一个建议是C++期望在类型之间显式地输入类型(超过C)。因此,使用强制转换将time_t返回的time转换为unsigned intsrandstdlib.h的输入参数类型。 (当然,这可能不是链接器错误的问题)

尝试使用<cstdlib>,尝试使用#include <cstdlib> #include <iostream> #include <ctime> using namespace std; int main() { srand(time(0)); //use current time as seed for random generator int random_variable = rand(); cout << "Random value on [0 " << RAND_MAX << "]: " << random_variable << '\n'; } ,而不是使用{{1}}。因为它使用名称空间。

除此之外,我已经看到了这个片段here。如果它有帮助,请使用该模式。

{{1}}

SO检查中是否存在问题是否有助于Eclipse Method could not be resolved in a simple program C++

Never use time() to initialize srand().

修改

现在看来很多人都遇到了这种问题。我找到了一个问题How do I fix Eclipse CDT Error “Function 'isdigit' could not be resolved。他面临着同样的问题。提问者建议在他的问题编辑中解决这个问题。

引用该问题:

  

我现在认为这是一个代码分析问题。更好的解决方案是   编辑代码分析选项以使“功能不能   解决“是一个警告,而不是一个错误。这样你就可以看到   问题视图中的警告,但继续工作。如果功能是   真的很想念,编译器会告诉你的!我也有一个新的理论,   问题出在代码分析器后面的符号链接,因为   所有“缺失”函数都在符号链接的包含文件中。将   喜欢这个理论的任何意见。

希望能够解决问题。

答案 1 :(得分:3)

;之后

#include不应该在那里。

答案 2 :(得分:2)

#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

#include个文件不应以;

结尾