Я написал шаблонную функцию, которая должна принимать ссылку на массив элементов const, который имеет определенный размер. Но по какой-то причине компилятор говорит, что эта функция не совпадает, когда я вызываю ее
#include<iostream>
struct Node
{
int key, left, right;
};
template <int N>
bool isCorrect(const Node (&nodes)[N])
{
// doesn't matter
return true;
}
int main ()
{
int n;
std::cin >> n;
Node nodes[n];
std::cout << (isCorrect(nodes) ? "CORRECT" : "iNCORRECT") << '\n';
return 0;
}
Это дало мне довольно загадочное сообщение об ошибке, которое я не смог расшифровать:
"candidate template ignored couldn't match **Node** against **Node"**.
Я почти уверен, что шаблон можно использовать для определения размера массива, как я пытаюсь сделать, но это не получается.
Это связано с тем, что я использую непримитивный тип?
Да, я знаю, что могу использовать вектор и вообще избежать этой проблемы.
Но я действительно хочу знать, что, черт возьми, происходит, когда компилятор не может сопоставить тип с самой .
Что я могу сделать, чтобы избежать этого странного сообщения в будущем?