C++ templates, undefined reference

You need to use the export keyword. However, I don’t think G++ has proper support, so you need to include the template function’s definition in the header so the translation unit can use it. This is because the <int> ‘version’ of the template hasn’t been created, only the <typename T> ‘version.’

An easy way is to #include the .cpp file. However, this can cause problems, e.g. when other functions are in the .cpp file. It will also likely increase the compile time.

A clean way is to move your template functions into its own .cpp file, and include that in the header or use the export keyword and compile it separately.

More information on why you should try and put template function definitions in its header file (and ignore export altogether).

Leave a Comment