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

时间:2015-10-16 14:38:11

标签: c++ class methods

我有两个课程:"游戏"班级"单元"类。

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

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

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

由于我无法真正做到如何正确地做到这一点,所以我决定使用"静态"方法,虽然我的第一个需求是使用类的实例。仍然无法让它发挥作用.. 这是我在我的Game类中随机使用的试用版(但不是我想要的那个类的实例),我只能运行静态打印函数,但静态随机只会抛出一个错误:LNK2001未解析的外部符号" public:static class std :: random_device Game :: rgen" (?的RGen @ @@游戏@ 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";
}

1 个答案:

答案 0 :(得分:2)

以来,您收到了该错误
static std::random_device rgen;

未在课堂外宣布。

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

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

打印工作的原因是,因为它不使用未声明的静态变量rgen。