我有兩個類:「遊戲」類和「單元」類。從主類中實例化的另一個類訪問主類實例方法
在Main函數啓動程序後,遊戲被實例化。 內部遊戲類的構造函數我創建了一些「單元」類實例。
然後我想我的單位之一運行從我主要功能創建的遊戲類實例的方法(例如使用遊戲內置的隨機數字引擎)
這可能嗎?從此類中實例化的類訪問父實例方法的最佳方式是什麼?
由於我無法真正瞭解如何正確地做到這一點,我決定使用「靜態」方法,儘管我的第一個需要是使用一個類的實例。仍然無法得到它的工作.. 這是我從我的遊戲類的隨機使用(但不是我想要的類的實例),我只能運行靜態打印功能,但靜態隨機只拋出一個錯誤:LNK2001無法解析的外部符號「public:static class 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";
}
這似乎是一個很主觀的問題。我的選擇是選擇不同的類設計,並將隨機函數封裝在傳遞給「單元」的「隨機」對象中。 –
爲什麼不傳遞生成器,似乎它值得擁有自己的類 –