gpt4 book ai didi

c++ - 从主类中实例化的另一个类访问主类实例方法

转载 作者:行者123 更新时间:2023-11-28 02:18:57 26 4
gpt4 key购买 nike

我有两个类(class):“游戏”类(class)和“单位”类(class)。

在 Main 函数中程序启动后立即实例化游戏。在 Game 类构造函数中,我创建了一些“Unit”类实例。

然后我希望我的一个单元运行我在 Main 函数中创建的 Game 类实例的方法(例如使用 Game 的内置随机数引擎)

这可能吗?从此类中实例化的类访问父实例方法的最佳方式是什么。

由于我无法真正了解如何正确地执行此操作,因此我决定使用“静态”方法,尽管我的首要需求是使用类的实例。仍然无法让它工作..这是我从我的 Game 类中使用 random 的尝试(但不是我想要的那个类的实例),我只能运行一个静态打印函数但是 static random 只是抛出一个错误:LNK2001 未解析的外部符号“public:static类 std::random_device Game::rgen"(?rgen@Game@@2Vrandom_device@std@@A)

顺便说一句,mt19937 给出了类似的错误。使用 Visual Studio 2015。

#include <iostream>
#include <random>

class Game;
class Unit;

class Game
{
public:
Game();
static void printSomething(); // test function

static std::random_device rgen; // main game random generator

// a shorthand function for quick generating random numbers
static int rnd(int min, int max){
std::uniform_int_distribution<int> uid(min, max);
return uid(rgen);
}
static double rnd(double min, double max){
std::uniform_real_distribution<double> urd(min, max);
return urd(rgen);
}
};

class Unit
{
public:
Unit() {
std::cout << "unit created\n";
Game::printSomething(); // this works
std::cout << "random num is " << Game::rnd(1,100) << "!\n"; // this doesn't work
}
};

// ********************************************** //
int main()
{
Game game; // main game instance
}

// ********************************************** //

Game::Game() {
Unit * unit = new Unit;
}

void Game:: printSomething() {
std::cout << "Printing something!\n";
}

最佳答案

你得到那个错误是因为

static std::random_device rgen;

没有在课外声明。

您应该在类定义之后添加以下行:

std::random_device Game::rgen (*any constructor arguments needed*);

print 之所以起作用,是因为它没有使用未声明的静态变量 rgen。

关于c++ - 从主类中实例化的另一个类访问主类实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33173150/

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