【问题标题】:srand(time(NULL)) "Function 'srand' could not be resolved."srand(time(NULL)) "函数 'srand' 无法解析。"
【发布时间】:2016-03-20 17:29:02
【问题描述】:

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

为什么会出现语法错误?

#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' 无法解析。”

  • 我现在很清楚,我不需要在 'include' 语句之后使用分号
  • 我正在使用 Eclipse CDT 和 MinGW 作为我的编译器

我是如何解决问题的:

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

【问题讨论】:

  • 您没有显示完整的错误信息表明您不习惯阅读它。
  • time() 返回一个 time_t 对象。 srand() 需要一个无符号整数。看到问题了吗?
  • @OP 您迫切需要重新仔细阅读初学者 C 或 C++ 教程。错误的简单包含表明您还没有准备好编写任何实际复杂的东西。
  • 已经存在问题,请检查是否有帮助Eclipse Method could not be resolved in a simple program C++
  • @Haque1 是的,你的 ide 配置有问题……你解决问题的任何方法……太好了

标签: c++ srand


【解决方案1】:

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

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

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

          #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 返回的time_t 转换为unsigned int,这是srand 的输入参数类型。 (当然这可能不是链接器错误的问题)

不要使用stdlib.h,而是尝试使用&lt;cstdlib&gt;,如果有帮助就试试。因为它使用命名空间。

除此之外,我还看到了这个 sn-p here。如果有帮助,请使用该模式。

#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';
}

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。他面临着同样的问题。提问者在他的问题编辑中建议解决此问题。

引自该问题:

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

希望能解决问题。

【讨论】:

  • 有一个main方法,只是这里没有贴出来。我遇到的问题是在 isPrime() 函数中,所以这就是我发布的内容
  • MinGW。另外,如果有帮助,我正在 Eclipse CDT 中开发
  • @Haque1 在我的回答中查看编辑,使用该链接解决您的问题。
  • 链接器错误?在同时启动的多个进程中使用随机数生成时,发布的链接不鼓励将 time() 作为种子。那里没有任何链接器错误。它似乎也与问题无关。
  • @Lundin 谢谢 :) 我一定会编辑我的答案来改进这个......我目前正在搜索......
【解决方案2】:

; 不应出现在#include 之后。

【讨论】:

    【解决方案3】:
    #include <iostream>
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    

    #include 文件不应以 ; 结尾

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 1970-01-01
      • 2021-12-15
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多