【问题标题】:what needs doing if including cstdlib doesn't let me use rand()?如果包含 cstdlib 不允许我使用 rand(),需要做什么?
【发布时间】:2020-11-26 11:06:14
【问题描述】:

所以,我正在尝试使用 cstdlib 和 rand() 复制一个简单的掷骰子,但是 Visual Studio 代码似乎对 rand 有问题,声称它没有定义,尽管我已经包含了 cstdlib,有什么想法吗?

我会粘贴代码,就像 atm 一样简单,也许有人可以弄清楚?仅供参考,我在 PopOS 20.10 上使用 Visual Studio Code(不确定是否相关)

#include <iostream>
#include <cstdlib>
#include <random>

class player
    {
        public:

            std::string name;
            int health;
            int strength = 1 + (std::rand() % 12);
            int defense;
            int initiative;
            int luck;

            void levelup();

            void win();

            void lose();

        private:   

    };

它抛出的错误是: 命名空间“std”没有成员“rand”C/C++(135)

【问题讨论】:

  • Works for me。您应该包含您看到的完整错误消息,它可能会为真正发生的事情提供线索。
  • 不确定,但 C 定义了 rand,而 C++ 定义了 std::rand。将randusing namespace std; 一起使用可能会使不太聪明的编译器感到困惑。
  • 如果我做到了:int strength = 1 + (std::rand() % 6);然后它给了我:命名空间“std”没有成员“rand”C/C++(135)。实际上,如果我使用命名空间取出,字符串名称会引发问题,所以我添加了 std::string,它很好。然而 std::rand() 仍然有问题
  • Why is “using namespace std;” considered bad practice? 然后试试@Serge Ballesta 写的东西

标签: c++ random


【解决方案1】:

所以问题在于 /usr/include/c++/10/tr1/cstdlib 中的文件内容没有使用 rand、srand 等...

在 /usr/include/c++/10/cstdlib 中有一个不错的副本,其中引用了 rand 和 srand。

我可能必须将所有文件从 /include 复制到 /include/tr1,因为那似乎是 VSC 正在寻找的地方,否则我将不得不尝试编辑我的包含路径,排除 tr1。

现在,我刚刚将 /usr/include/c++/10/cstdlib 复制到 /usr/include/c++/10/tr1/cstdlib,重新启动 VSC 和 viola,工作正常。

【讨论】:

  • 很高兴你把它整理好了,但是复制系统头文件听起来像是未来问题的秘诀。您应该编辑您的编译器配置,使其位于正确的位置。
  • 同意。不知道为什么它一开始就不在那里。我会看看我能不能解决这个问题。感谢您的支持!
猜你喜欢
  • 1970-01-01
  • 2022-01-08
  • 2022-01-13
  • 2020-11-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 2022-10-20
相关资源
最近更新 更多