Я пытаюсь создать генератор случайного уровня, который использует mersenne twister. Вот код (это только начало, так что это не имеет особого смысла):Невозможно преобразовать uniform_int_distribution <int> в int
Generator.h:
//Level generator
#pragma once
class GameMap
{
public:
static int bgmap[256][256];
static int fg1map[256][256];
static int fg2map[256][256];
static int genposx, genposy, width, height;
static std::mt19937 twister(int);
static std::uniform_int_distribution<int> dist1(int, int);
static std::uniform_int_distribution<int> dist2(int, int);
static std::random_device rd;
void Generate(int sizex, int sizey, int seed);
GameMap();
~GameMap();
};
Generator.cpp:
//#include <SFML/Graphics.hpp>
#include <random>
#include "Generator.h"
GameMap::GameMap()
{
dist1(1, 8);
dist2(1, 248);
}
void GameMap::Generate(int sizex, int sizey, int seed = rd())
{
twister(seed);
genposx = 1;
genposy = 1;
do
{
genposx = dist2(twister);
genposy = dist2(twister);
width = dist1(twister);
height = dist1(twister);
} while (whatever);
}
Проблема заключается в том, что я могу 't конвертировать uniform_int_distrubution в int. Я получаю Intellisense сообщения об ошибках:
no suitable conversion from unifgorm_int_distribution<int>" to "int" exists
argument of type "std::mt19937 (*)(int)" is incompatible with parameter of type "int"
too few arguments in function call
Все те, которые на этих линиях:
genposx = dist2(twister);
genposy = dist2(twister);
width = dist1(twister);
height = dist1(twister);
Я потерял много времени на поиск в Интернете ответ, но я не мог найти ничего. Пожалуйста помоги.
Ну, почему вы пытаетесь преобразовать 'uniform_int_distribution' к 'int'? Это бессмысленно. Я не верю, что вы «потеряли много часов, отыскав в Интернете ответ», потому что есть масса материалов для чтения по правильному использованию «uniform_int_distribution», и ни один из них не представлен в вашем коде. Вы даже не предоставляете правильное количество аргументов вашим функциям 'dist1' и' dist2' ... –
Почему все в вашем классе является статическим членом данных? Вы не указали определения для каких-либо из этих статических членов, и по какой-то нечетной причине вы продолжаете писать типы своих аргументов конструктора при их объявлении, поэтому компилятор считает, что они являются объявлениями функций-членов. Вероятно, это не тот ответ, который вы хотите услышать, но сделанные вами ошибки предполагают, что вам очень полезно прочитать [C++ book] (https://stackoverflow.com/q/388242/241631). – Praetorian
@Praetorian - Нет, это не ответ, который я бы не хотел слышать. Программирование на самом деле не на первом месте моих интересов, и я не трачу большую часть своего свободного времени на это. Обычно, когда я программирую, я не использую объекты, потому что это низкоуровневое программирование, предназначенное для аппаратного обеспечения, поэтому я новичок в этом. Я собираюсь купить какую-то книгу, потому что кажется, что то, что я узнал об объектах до этого момента, - это фигня. В любом случае, спасибо за ответ. – Mohrcore