99% времени LNK2019
означает, что вы забыли фактически полностью определить тело функции или класса, который вы где-то использовали. Где реализация ToShape()
, Sculp()
и CalculateMesh()
?Как насчет конструктора и деструктора ?
Похоже, что вы помещаете реализации в файл .cpp
.Понятно, что интерфейс следует отделять от реализации, но шаблоны классов - это совершенно разные звери от не шаблонов.
На самом деле компилятор не генерирует машинный код для шаблонов, поскольку не все параметры шаблона имеютбыли определены еще.Вы не можете сгенерировать машинный код для Sculptor
, не зная, например, насколько большим будет массив-член.Компилятор не знает заранее, что Size == 16
когда компилятор приступает к разбору определения шаблона.Таким образом, вы получаете ошибки компоновщика, так как компоновщик не может найти машинный код для него;его не существует!
Для шаблонных классов вы обычно помещаете реализацию в самом объявлении класса шаблона , так что вы, вероятно, действительно упускаете определения функций , например:
template<int Size>
class Sculptor
{
public:
Sculptor()
{
// implementation
}
// and so on...
Шаблоны в библиотеках Boost и стандартной библиотеке C ++ определены следующим образом.
Примечание: с Size == 16
вы создаете массив 3x3 с 4096unsigned char
с в нем.Хотя это само по себе не является проблемой, переполнение стека довольно легко, когда один Sculptor
занимает не менее 4096 unsigned char
с в стеке.