私は学校の課題をコンパイルしようとしていますが、間違いました。この時間にuniで利用可能な資格のある教師がいないので、エラーになっC++は関数テンプレート 'iterator_traits'を特化できませんでした
イム: "エラーC2893は、関数テンプレートを専門に失敗しました 'にiterator_traits < _Iter> :: difference_typeのはstd ::距離(_init、_init')" ラインを22
iは理由として見当もつかないこのエラーが発生します。
コード:
は#pragma once
// ttt.h
#ifndef TTT_H
#define TTT_H
#include <tuple>
#include <array>
#include <vector>
#include <ctime>
#include <random>
#include <iterator>
#include <iostream>
enum class Player { X, O, None };
using Move = int;
using State = std::array<Player, 9>;
// used to get a random element from a container
template<typename Iter, typename RandomGenerator>
Iter select_randomly(Iter start, Iter end, RandomGenerator& g) {
std::uniform_int_distribution<> dis(0, std::distance(start, end) - 1);
std::advance(start, dis(g));
return start;
}
template<typename Iter>
Iter select_randomly(Iter start, Iter end) {
static std::random_device rd;
static std::mt19937 gen(rd());
return select_randomly(start, end, gen);
}
std::ostream &operator<<(std::ostream &os, const State &state);
std::ostream &operator<<(std::ostream &os, const Player &player);
Player getCurrentPlayer(const State &state);
State doMove(const State &state, const Move &m);
Player getWinner(const State &state);
std::vector<Move> getMoves(const State &state);
#endif // TTT_H
関数呼び出し」:
State mcTrial(const State &board)
{
State currentBoard = board;
std::vector<Move> possibleMoves = getMoves(currentBoard);
while (possibleMoves.size() > 0) {
int move = select_randomly(0, (int)possibleMoves.size() -1);
Move m = possibleMoves[move];
currentBoard = doMove(currentBoard, m);
possibleMoves = getMoves(currentBoard);
}
return currentBoard;
}
どこで 'select_randomly'を使用しますか? – Jarod42
テンプレート関数' selecをインスタンス化するために使用される 'Iter'型に依存しますt_randomly'です。 'select_randomly'の呼び出しを表示してください。 –
ところで、出力ウィンドウで、より長いエラーメッセージが必要です。 – Jarod42