У меня проблема со временем соединения, когда я включаю шаблонный и не шаблонный класс в один и тот же файл .cpp.
Я прошел C ++ FAQ 35.13,35.14,35.15, и это не решило проблему.
http://www.parashift.com/c++-faq-lite/separate-template-class-defn-from-decl.html
Я использую Xcode 5 с Clang.
Вот пример
class bar{
public:
void barfunc();
};
template <class T>
class foo{
public:
void foofunc();
};
Вот файл cpp:
void bar::barfunc(){...my code...}
template <class T>
void foo<T>::foofunc() {...my code...}
//I also put a instance of template class foo in the .cpp file
template class foo<int>;
//But is still generates the link error
Ошибка
clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)
Но когда я удаляю класс bar, ошибка исчезает, может кто-нибудь сказать мне, почему он генерирует эту ошибку?
Поместить определение в заголовочный файл может решить проблему, но это может вызвать другую проблему, которая является вздутие кода, кто-нибудь может дать другие решения?
Я обнаружил проблему, проблема в том, что я не создал экземпляр класса шаблона для типа, который я использую в коде.
Вот решения для решения проблемы создания шаблона:
Поместите определение в заголовочный файл, чтобы у компилятора была информация об экземпляре. (недостаток — увеличить время загрузки и компиляции)
Выявить все типы, которые используются в коде
Других решений пока нет …