Я делаю домашнее задание, и мне трудно понять одну вещь. Я предполагаю написать BST, который может работать с целым числом или с плавающей точкой. А для этого и практики у нас есть разные файлы заголовков для целых чисел, чисел с плавающей запятой и самого дерева.
Я пытаюсь создать способ запуска функции в зависимости от того, с каким типом я сейчас работаю [int / float] без необходимости писать его дважды. так что я получил что-то вроде этого:
void addItemToTree(BST* bst, void* val)
{
#ifdef IsInt
addItemToTreeRec(bst->head, *((int*)val));
#else
addItemToTreeRec(bst->head, *((float*)val));
#endif
}
пока никаких проблем, это приводит к:
#ifdef IsInt
void addItemToTreeRec(node* my_node, int val)
#else
void addItemToTreeRec(node* my_node, float val)
#endif
{
-- function itself ---
}
но проблема в том, заголовочный файл, содержащий все целые числа, связанные структура и объявление не распознают мою функцию, в то время как файл заголовка float распознает . Я подумал, что это должно что-то делать с тем, как я кладу ifdef
, но я не могу решить его, не копируя весь код и не помещая его перед #else