Я работаю над школьным проектом и столкнулся с серьезным препятствием.
Проект включает создание базы данных с использованием дерева двоичного поиска (BST предоставлено для нас), что я и сделал. Я сейчас пытаюсь написать методы поиска. Решение, которое поощряет профессор, заключается в кодировании:
filmDatabaseBST.inorderTraverse(studioTest);
, где filmDatabaseBST - база данных (содержащая объекты Film), а studioTest
- передаваемый метод.
void FilmDatabase::studioTest(Film& anItem)
{
string s; //temporary variable to hold studio from Film
s = anItem.getStudio(); //
if (s == findStudio) //if the search term and the Films studio match
{
Film tempFilm = filmDatabaseBST.getEntry(anItem); //copy Film object and display the data
display(tempFilm);
searchResult = true; //set check to true to indicate a result was found
}
studioTest()
в настоящее время является публичным методом в классе. Когда я пытаюсь это сделать, я получаю следующую ошибку:
FilmDatabase.cpp:209:49: error: no matching function for call to 'BinarySearchTree<Film>::inorderTraverse(<unresolved overloaded function type>)'
Я должен добавить это, используя
filmDatabase.inorderTraverse(display);
отлично работает, вызывая следующий метод на каждом узле и печатая данные из сохраненного там объекта.
void display(Film& anItem)
{
anItem.printFilm();
}
Единственное отличие состоит в том, что display()
не определен в файле .h и ему не назначено пространство имен FilmDatabase ::. Я пытался сделать то же самое с studioTest()
, но получаю те же ошибки.
Может ли кто-нибудь дать мне толчок в правильном направлении? Я довольно новичок в качестве программиста и использую C ++, и это мой первый пост, поэтому я прошу прощения, если отсутствует важная информация. Пожалуйста, дайте мне знать, если это так, и я предоставлю / объясню, что смогу.
Примечание: я провел столько исследований, сколько смог, но все результаты, которые я нашел, - это проблемы с самим кодом BST, которые, как я неоднократно уверял, чистые, и я не должен их изменять. Другие студенты успешно реализовали наши рекомендации профессоров, поэтому должен быть способ заставить их работать.
РЕДАКТИРОВАТЬ: Сумма моей проблемы заключалась в том, что они должны были быть свободными функциями, как любезно указал Зан Линкс в ответе ниже. После изменения программы, чтобы учесть это, все работает отлично. Большое спасибо за помощь!