gpt4 book ai didi

c++ - 不能在类实现中使用类字段

转载 作者:行者123 更新时间:2023-11-30 02:52:31 24 4
gpt4 key购买 nike

这给了我 C3867:(您试图获取成员函数的地址,而没有使用类名和地址运算符限定成员函数。)

    //.h
class Entity
{
private:
const std::ranlux24_base random_engine(std::random_device);
void Print();
};

//.cpp
void Entity::Print()
{
std::uniform_int_distribution<int> uniform_dist(0, 10);
cout << uniform_dist(random_engine);
}

C++ 中的新功能。如果我在本地声明 random_engine:

void  Entity::Print()
{
std::random_device rd;
std::ranlux24_base e1(rd());
std::uniform_int_distribution<int> uniform_dist(1, 3);
int val = uniform_dist(e1);
}
  • 所有的warks...无法理解什么是原因..

最佳答案

我相信您需要一个随机设备和 prng 引擎作为 .cpp 文件中的静态类成员或局部变量。在 C++11 中,分布对象使用提供的随机引擎,使用设备提供的初始种子适本地播种,以生成它们的分布。重要的是您只构 build 备一次,并尽可能提供种子一次。当您查看代码时,您所呈现的“有效”正是它的作用。

因此,如果您想避免在每次调用 Entity::Print() 时重新创 build 备和引擎,您有多种选择。一种是使它们成为类静态成员:

在你的标题中:

class Entity
{
private:
static std::random_device rd;
static std::ranlux24_base rng;
void Print();
};

在您的 .cpp 文件中:

std::random_device Entity::rd;
std::ranlux24_base Entity::rng(Entity::rd());

void Entity::Print()
{
std::uniform_int_distribution<int> uniform_dist(0, 10);
std::cout << uniform_dist(rng);
}

但是,如果它们仅在 Entity.cpp 文件的 Entity::Print() 方法中专门使用,那么将它们设置为静态类是毫无意义的,在这种情况下,您可以这样做:

在标题中:

class Entity
{
private:
void Print();
};

在cpp文件中:

void  Entity::Print()
{
static std::random_device rd;
static std::ranlux24_base rng(rd());

std::uniform_int_distribution<int> uniform_dist(0, 10);
std::cout << uniform_dist(rng);
}

关于c++ - 不能在类实现中使用类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com