У меня есть два класса: класс «Игра» и класс «Единица».Доступ к методам экземпляра основного класса из другого класса, созданного в основном классе
Игра создается сразу после запуска программы в функции Main. Внутри конструктора класса «Я» я создал несколько экземпляров класса «Единица».
Тогда я хочу один из моих единиц, чтобы запустить метод из класса Game Например, я создал в главной функции (например, чтобы использовать Game встроенный в случайных чисел двигателя)
Возможно ли это? Каков наилучший способ доступа к методу экземпляра родителя из класса, созданного в этом классе.
Поскольку я не мог понять, как правильно это сделать, я решил использовать «статический» метод, хотя мои первые потребности заключались в использовании экземпляра класса. Все еще не удалось заставить его работать. Это мой пример использования случайного из моего класса Game (но не экземпляр этого класса, как я и хотел), мне удалось запустить только статическую функцию печати, но статические случайные просто бросают ошибка: 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";
}
Это похоже на довольно субъективный вопрос. Моим выбором было бы выбрать другой класс, со случайными функциями, инкапсулированными в объект «Случайный», который вы передаете в «Unit». –
Почему бы не пропустить генератор вокруг, кажется, что он заслуживает своего класса –