Я столкнулся с чем-то интересным и раздражающим при программировании класса матрицы: внутренняя ошибка компилятора. Я был готов вызвать сестру конструктора в классе под названием Matrix4<T>::Matrix4(Matrix4<T>&&)
, Это кусок кода, который генерирует эту ошибку:
template<typename T>
Matrix4(Matrix4&& matrix_) = default;
template<typename T>
Matrix4<T>::Matrix4(T (&&matrix_)[4][4]):
Matrix4({
.data = {
{matrix_[0][0], matrix_[0][1], matrix_[0][2], matrix_[0][3]},
{matrix_[1][0], matrix_[1][1], matrix_[1][2], matrix_[1][3]},
{matrix_[2][0], matrix_[2][1], matrix_[2][2], matrix_[2][3]},
{matrix_[3][0], matrix_[3][1], matrix_[3][2], matrix_[3][3]}
}
})
{
}
И это внутренняя ошибка компилятора (компилятор GCC и IDE это Code :: Blocks):
внутренняя ошибка компилятора: в process_init_constructor_array, в
ф / typeck2.c: 1080
Возможно, компилятор не может успешно разобрать мой код. Я уверен, что с синтаксисом все в порядке. Что я могу сделать в этой ситуации?
Попробуйте скомпилировать его другим компилятором. Возможно, что в вашем коде есть очень тонкая ошибка, и другой компилятор может рассказать вам больше. Я рекомендую попробовать лязг, как это широко рекламировалось для того, чтобы иметь лучшие сообщения об ошибках, хотя самые последние версии GCC стремятся изменить это понятие.
Если он не работает на обоих компиляторах без реального сообщения об ошибке, то у вас есть один из лучших тестовых кодов для этой ошибки, и сообщество разработчиков компиляторов будет очень признательно за предоставление отчета об ошибке.
Других решений пока нет …