С++ не может понять: «Ни один экземпляр шаблона функции не соответствует списку аргументов» ⇐ C++
С++ не может понять: «Ни один экземпляр шаблона функции не соответствует списку аргументов»
Я просматривал все темы с одной и той же ошибкой, но так и не понял, в чем проблема с моим кодом.
Я определил шаблон функции следующим образом:
шаблон __forceinline static constexpr bool kingAttackedC(const BoardState& boardState) { if constexpr (PAWN_CAPTURES[boardState.side][square] и boardState.pawnE) { вернуть истину; } иначе, если constexpr (getKnightAttacks(square) & boardState.knightE) { вернуть истину; } иначе, если constexpr (getKingAttacks(square) & boardState.kingE) { вернуть истину; } else if constexpr (getBishopAttacks(square, boardState.occupancy) & (boardState.bishopE | boardState.queenE)) { вернуть истину; } else if constexpr (getRookAttacks(square, boardState.occupancy) & (boardState.rookE | boardState.queenE)) { вернуть истину; } еще вернуть ложь; } Я пытаюсь вызвать его следующим образом (где boardState определяется как const):
if (!kingAttackedC(boardState)) { узлы++; } Кажется достаточно простым, но я не могу этого сделать.
Я использую шаблон, надеясь перенести часть этой логики во время компиляции.
Бонусный вопрос: в чем разница между передачей параметра в '< >' и '( )'?
изменить:
Структура BoardState: структура BoardState { const U64 занятость; const U64 занятостьF; const U64 занятостьE; const U64 пешкаF; const U64 рыцарьF; const U64 епископF; const U64 ладьяF; константа U64 королеваF; константа U64 корольF; const U64 пешкаE; const U64 рыцарьE; const U64 епископE; const U64 ладьяE; константа U64 королеваE; константа U64 корольE; const bool сторона; constexpr BoardState(U64 занятие, U64 занятиеF, U64 занятиеE, U64 пешкаF, U64 коньF, U64 слонF, U64 ладьяF, U64 ферзьF, U64 корольF, U64 пешкаE, U64 коньE, U64 слонE, U64 ладьяE, U64 ферзьE, U64 корольE, булавка): занятость(занятость), занятостьF(занятостьF), занятостьE(занятостьE), пешкаF(пешкаF), коньF(коньF), слонF(слонF), ладьяF(ладьяF), ферзьF(ферзьF), корольF(корольF), пешкаE(пешкаE), коньE(коньE), слонE(слонE), ладьяE(ладьяE), ферзьE(ферзьE), корольE(корольE), сторона(сторона) { } };
Я просматривал все темы с одной и той же ошибкой, но так и не понял, в чем проблема с моим кодом.
Я определил шаблон функции следующим образом:
шаблон __forceinline static constexpr bool kingAttackedC(const BoardState& boardState) { if constexpr (PAWN_CAPTURES[boardState.side][square] и boardState.pawnE) { вернуть истину; } иначе, если constexpr (getKnightAttacks(square) & boardState.knightE) { вернуть истину; } иначе, если constexpr (getKingAttacks(square) & boardState.kingE) { вернуть истину; } else if constexpr (getBishopAttacks(square, boardState.occupancy) & (boardState.bishopE | boardState.queenE)) { вернуть истину; } else if constexpr (getRookAttacks(square, boardState.occupancy) & (boardState.rookE | boardState.queenE)) { вернуть истину; } еще вернуть ложь; } Я пытаюсь вызвать его следующим образом (где boardState определяется как const):
if (!kingAttackedC(boardState)) { узлы++; } Кажется достаточно простым, но я не могу этого сделать.
Я использую шаблон, надеясь перенести часть этой логики во время компиляции.
Бонусный вопрос: в чем разница между передачей параметра в '< >' и '( )'?
изменить:
Структура BoardState: структура BoardState { const U64 занятость; const U64 занятостьF; const U64 занятостьE; const U64 пешкаF; const U64 рыцарьF; const U64 епископF; const U64 ладьяF; константа U64 королеваF; константа U64 корольF; const U64 пешкаE; const U64 рыцарьE; const U64 епископE; const U64 ладьяE; константа U64 королеваE; константа U64 корольE; const bool сторона; constexpr BoardState(U64 занятие, U64 занятиеF, U64 занятиеE, U64 пешкаF, U64 коньF, U64 слонF, U64 ладьяF, U64 ферзьF, U64 корольF, U64 пешкаE, U64 коньE, U64 слонE, U64 ладьяE, U64 ферзьE, U64 корольE, булавка): занятость(занятость), занятостьF(занятостьF), занятостьE(занятостьE), пешкаF(пешкаF), коньF(коньF), слонF(слонF), ладьяF(ладьяF), ферзьF(ферзьF), корольF(корольF), пешкаE(пешкаE), коньE(коньE), слонE(слонE), ладьяE(ладьяE), ферзьE(ферзьE), корольE(корольE), сторона(сторона) { } };
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение