Мой вопрос довольно прост ... У меня есть двоичное дерево поиска, которое шаблонизировано. Мне нужно, чтобы пользователь мог передать функцию сравнения при вызове конструктора. Мой код продолжал кричать на меня, пока я не шаблонизировал пользовательскую функцию (в программе драйвера). Это сломало мою интуицию о том, как работает шаблонирование. Это заставляет меня задуматься, не является ли мой код шаблонным, как я ожидаю. Мне просто любопытно, нормально ли иметь пользовательский шаблон для своих функций при объявлении объекта класса, который является шаблонным (особенно, когда этот объект требует передачи определенной пользователем функции). Если это не нормально, то я знаю, что у меня что-то не так с моим кодом.
Это ошибка, которую я получал раньше. Эти "необъявленные идентификаторы" просто являются результатом одной ошибки в строке 93. Именно здесь я пытаюсь создать экземпляр класса.
//Part of driver program.
//Not sure why code doesn't work without template <typename T>
template <typename T>
int compare(const int data, const int nodeData)
//User defined compare function. Takes two values and compares them and returns a -1, 0, or 1 if it is less than equal to or greater than respectively.
{
int returnValue; //The value that will be returned.
if (data < nodeData)
{
returnValue = -1;
}
else if (data > nodeData)
{
returnValue = 1;
}
else
{
returnValue = 0;
}
return(returnValue);
}
//Now for the code that is inside my class.
//The following is my decoration for the function pointer within my class.
//////////////
int (*funcCompare)(T i, T j);
////////////////
//And lastly here is my constructor for my class
SplayTree(int(*compFunction)(const T, const T)) //Constructor that takes a pointer to a comparison function as an arugment.
{
funcCompare = compFunction;
};