为什么这会给我一个链接器错误?(使用<random>生成随机数)

Ree*_*hok 1 c++ random linker

注意:coord是一个std :: pair

   class Random
{
public:
    Random()
    {
        gen.seed(rd());
    };
    coord rnd_coord(int x, int y)
    {
        std::uniform_int_distribution<> dist_x(0, x - 1);
        std::uniform_int_distribution<> dist_y(0, y - 1);
        coord temp;
        temp.first = dist_x(gen);
        temp.second = dist_y(gen);
        return temp;
    }
private:
    static std::random_device rd;
    static std::mt19937 gen;
};
Run Code Online (Sandbox Code Playgroud)

然后在main.cpp中

int x;
Random R;
coord C;
C = R.rnd_coord(10, 10);
std::cout << C.first << ", " << C.second << std::endl;
std::cin >> x;

return 0;
Run Code Online (Sandbox Code Playgroud)

我正在做一些测试,但是我遇到了很多问题:(,tbh我有一段时间没有编程了。无论如何,我想创建一个辅助函数,该函数将在指定范围内返回随机坐标,该函数位于“ snake_utility.h”,但是由于它给了我错误,所以将其放在一个类中,现在出现链接器错误:

错误1错误LNK2001:无法解析的外部符号“私有:静态类std :: random_device Random :: rd”(?rd @ Random @@ 0Vrandom_device @ std @@ A)C:\ Users \ Reethok \ Desktop \ C ++ \ Pet Projects \ Snake \ Snake \ main.obj Snake错误2错误LNK2001:未解析的外部符号“私有:静态类std :: mersenne_twister_engine Random :: gen”(?gen @ Random @@ 0V?$ mersenne_twister_engine @ I $ 0CA @ $ 0CHA @ $ 0 BIN @ $ 0BP @ $ 0JJAILANP @ $ 0L @ $ 0PPPPPPPP @ $ 06 $ 0JNCMFGIA @ $ 0P @ $ 0OPMGAAAA @ $ 0BC @ $ 0GMAHIJGF @@ std @@ A)C:\ Users \ Reethok \ Desktop \ C ++ \ Pet Projects \ Snake \ Snake \ main.obj Snake错误3错误LNK1120:2个未解决的外部组件C:\ Users \ Reethok \ Desktop \ C ++ \ Pet Projects \ Snake \ Debug \ Snake.exe 1 1 Snake

提前致谢!

R S*_*ahu 5

static当构造类的实例时,将构造类的非成员变量。static另一方面,该成员变量对于该类的所有实例都是相同的。它们需要明确定义。

您需要static在封闭的名称空间中定义成员变量。加

std::random_device Random::rd;
std::mt19937 Random::gen;
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中。