Здравствуйте, Аноним, Вы писали:
А>Ошибка: А>1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Stack<char>::~Stack<char>(void)" (??1?$Stack@D@@QAE@XZ) referenced in function _main
На момент инстанциации компилятор видит только содержание заголовочного файла. Он дожен видеть все тела методов, чтобы их заинстанциировать.
Вариантов несколько:
1. Все запихать в .h файл (и прототипы и реализации)
2. В конце .h файла написать #include "Stack.cpp"
3. Переименовать Stack.cpp в Stack.tpl, и уже его заинклудить по аналогии с пунктом 2.
На счет того как правильно — правильно по разному, решать тебе и Coding Guide'ам твоей конторы.
Здравствуйте, Murom, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
А>>Ошибка: А>>1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Stack<char>::~Stack<char>(void)" (??1?$Stack@D@@QAE@XZ) referenced in function _main
M>На момент инстанциации компилятор видит только содержание заголовочного файла. Он дожен видеть все тела методов, чтобы их заинстанциировать. M>Вариантов несколько: M>1. Все запихать в .h файл (и прототипы и реализации) M>2. В конце .h файла написать #include "Stack.cpp" M>3. Переименовать Stack.cpp в Stack.tpl, и уже его заинклудить по аналогии с пунктом 2.
M>На счет того как правильно — правильно по разному, решать тебе и Coding Guide'ам твоей конторы.
это странно для меня. т.к. я создал visual studio проект. положил в папку headers сам хедер и в папку source реализацию.
а также создал доп. файл main.cpp из которого это всё вызываю.
раньше это работало для других классов, но этот пример почему-то ругается.
ML>раньше это работало для других классов, но этот пример почему-то ругается.
А это проблема с шаблонами С++. Тебе придется либо держать определения в заголовке (ну или явно включать их, как тебе уже посоветовали). Либо можно использовать явное инстанцирование, что очень неудобно, ну или найти компилятор, поддерживающий раздельную компиляцию шаблонов и ключевое слово export
Of course, the code must be complete enough to compile and link.