Я работаю над реализацией сбалансированного дерева в c ++, но требование назначения состоит в том, что я должен использовать шаблонные классы. Я думал о том, чтобы сначала сделать это с помощью int, а затем преобразовать в шаблоны, но тестовый код, который нам дают, по умолчанию использует шаблоны.
Когда я компилирую свой код с помощью g ++ class.h test.cxx -Wall -g -O0, кажется, что все работает нормально, пока я не попаду в gdb, где он не вступит в реализацию шаблона. Мой файл реализации шаблона включен в конец файла заголовка, и GDB позволит мне устанавливать точки останова внутри него, но на самом деле он никогда не входит в функцию. Я использовал GDB через Emacs, но он также не работал напрямую в GDB. Я ожидал бы, что шаг переключается на файл шаблона, когда GDB попадает в функцию, которая там подразумевается, но вместо этого он говорит мне, что строка, на которую он думает, что должен идти, на самом деле не существует. Вот типичный сеанс:
(gdb) break set.template:7
Breakpoint 3 at 0x400c46: file set.template, line 7.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/students/jeffris/csci2270/btree/debug
Breakpoint 1, main () at debug.cxx:9
(gdb) step
Breakpoint 3, set (this=0x7fffffffe550) at set.template:7
Line number 7 out of range; set.template has 1 lines.
(gdb)
set()
Line number 8 out of range; set.template has 1 lines.
(gdb)
Line number 9 out of range; set.template has 1 lines.
(gdb)
Line number 10 out of range; set.template has 1 lines.
(gdb)
main () at debug.cxx:10
(gdb)
main_savitch_11::set<int>::empty (this=0x7fffffffe550) at set.template:70
Line number 70 out of range; set.template has 1 lines.
(gdb)
empty
Line number 71 out of range; set.template has 1 lines.
(gdb)
Line number 72 out of range; set.template has 1 lines.
(gdb)
Я видел несколько постов в сети, где другие люди сталкивались с подобными проблемами, но все темы исчезли без разрешения. Я пробовал несколько способов компиляции кода, в том числе в отдельных частях, а затем связать все это вместе, но не игра в кости. У всех остальных в моем классе такая же проблема, но они довольствовались использованием операторов cout для отладки, что является очень медленным способом отладки с 10 функциями, вызывающими друг друга. Кто-нибудь еще испытал это и нашел решение?