-3

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

为什么会出现语法错误?

#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 解决了这个问题。

4

3 回答 3

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 int是 . 的输入参数类型srand。(当然这可能不是链接器错误的问题)

而不是使用stdlib.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';
}

SO中已经存在问题检查是否有助于Eclipse方法无法在简单的程序C++中解决

永远不要使用 time() 来初始化 srand()。.

编辑:

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

从那个问题引用:

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

希望点能解决问题。

于 2013-06-11T05:16:46.603 回答
3

;之后不应该有#include

于 2013-06-11T05:16:48.540 回答
2
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

#include文件不应以;

于 2013-06-11T05:16:53.960 回答