"time"不是"std"的成员。

3

出现了一个错误,提示句子中的"time"不是"std"的成员:

std::srand(std::time(0));
<ctime><cstdlib>已经包含在内。编译器是TDM-GCC MinGW。我遇到了这个错误多次,但仍然无法找出原因。

3
请发布一个 [mcve] 来重现错误,正如此处所要求的那样。 - πάντα ῥεῖ
1
无法重现:http://coliru.stacked-crooked.com/a/995733500bfdc6f3 - eerorika
2
你可以指明你的编译器版本以及选择了哪些选项。 - Damien
1
@Damien,编译器是TDM-GCC MinGW。 - Meng
您可以编辑问题,指定gcc版本。我在家里有MinGW。回来后我会测试它是否仍然有用。 - Damien
显示剩余2条评论
1个回答

1
这是因为time(2)是一个C标准库函数,而不是C++标准库函数。
#include <iostream>
#include <ctime>

int main(int argc, char *argv[])
{
    auto t = time(nullptr);
    std::srand(t);
    std::cout << t << "\n";
    return 0;
}

错误信息为 (clang),而我使用的是 (gcc) 编译器,我们使用 std::time(0) 进行了测试,作为 PO。但我们无法复现这个问题。 - Damien
它也可以在我的系统上与这些编译器一起工作。但是,如果你回到足够旧的版本,你可能会遇到这个错误,并且 time(2) 仍然存在于 std 命名空间之外。那段代码还有两个问题,一个是将 0 而不是 nullptr 作为 time() 的参数,另一个是将 time() 的结果传递给 std::srand(),但是两者都不应该导致错误。 - Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接