У меня странная проблема. В Windows, с Visual Studio 2010, а также с компилятором Intel все связано должным образом. Но когда я пытаюсь скомпилировать свой код с помощью CLang 3.0 в Linux, он компилируется (и если я использую только один файл CPP, он также связывается и запускается), но не связывается.
Сообщение состоит в том, что существует несколько определений символов, относящихся к экземплярам шаблонов. Например, рассмотрим следующие две строки в файле заголовка, совместно используемом несколькими модулями компиляции:
template<class T> void myFunc(T in) { }
template<> void myFunc<int>(int in) { }
Теперь из компоновщика Linux я бы получил что-то вроде:
«file xyz»: множественное определение «myFunc (int in ) ", сначала определенная в" некотором файле ".
Но как мне предотвратить это? Поскольку он работает в Windows, я полагаю, он должен как-то работать и в Linux?
То же самое и со статическими элементами данных шаблона, которые более или менее идентичны описанным выше, только вы объявляете переменную вместо функции. Я бы предпочел, чтобы это работало для статических элементов данных шаблона.
Если все остальное не помогло, я полагаю, я все еще мог бы создать файл "MakeAll.cpp", который просто включает все существующие CPP, но для меня это не кажется желательным решением ...
Спасибо за вашу помощь !