Шаблоны C++, неопределенная ссылка

Ваша команда git show должна работать. Либо хеш-код недействителен, либо объект фиксации каким-либо образом поврежден.

Обновлено: Ваш скрипт возвращает хеши объектов, поэтому, вероятно, ссылка на этот объект является недействительной.

Вы не сможете получить от автора ссылку оттуда.

Это может помочь: g log --find-object=OBJECT_HASH. В этом списке перечислены все коммиты, в которых был изменен объект, чей хэш вы предоставили.

28
задан Daniel Sloof 22 June 2013 в 10:48
поделиться

4 ответа

Вам необходимо использовать ключевое слово export. Однако я не думаю, что G ++ имеет надлежащую поддержку, поэтому вам нужно включить определение функции шаблона в заголовок, чтобы модуль перевода мог использовать ее. Это связано с тем, что <int> «версия» шаблона не была создана, только <typename T> «версия».

Самый простой способ - #include файл .cpp. Однако это может вызвать проблемы, например, когда другие функции находятся в файле .cpp. Это также, вероятно, увеличит время компиляции.

Простой способ - переместить ваши шаблонные функции в собственный файл .cpp и включить его в заголовок или , использовать ключевое слово export и скомпилировать его отдельно.

Подробнее о том, почему вы должны попытаться поместить определения шаблонных функций в заголовочный файл (и вообще игнорировать export).

24
ответ дан Smi 28 November 2019 в 03:32
поделиться

Проблема состоит в том, что шаблон функции не является функцией. Это - шаблон для создания функций по мере необходимости.

Так, чтобы шаблон работал, для компилятора интуитивно нужны два сведения: сам шаблон и тип, которым нужно заменить в него. Это непохоже на вызов функции, который может генерировать компилятор, как только он знает, что функция существует. Это не должно знать то, что функция делает, просто что это похоже void Frobnicate(int, float), или независимо от того, что ее подпись.

, Когда Вы объявляете шаблон функции, не определяя его, Вы только говорите компилятору, что такой шаблон существует, но не, на что это похоже. Это недостаточно, чтобы компилятор был в состоянии инстанцировать его, это должно быть в состоянии видеть полное определение также. Обычное решение состоит в том, чтобы поместить весь шаблон в заголовок, который может быть включен при необходимости.

12
ответ дан jalf 28 November 2019 в 03:32
поделиться

Лучшая практика с шаблонными функциями должна определить их в заголовочных файлах. Они создаются во время компиляции, таким образом, компилятор должен иметь определение вокруг, чтобы сделать так.

, Когда export для шаблонов более поддерживался бы, это не будет иметь место, хотя, но прямо сейчас это все еще едва может использоваться.

4
ответ дан vava 28 November 2019 в 03:32
поделиться

Их любая поддержка компилятора, обрабатывают раздельную компиляцию по шаблону?

, Как я знаю, обычная практика, объявляют и реализуют шаблонные функции в заголовочном файле

0
ответ дан Baiyan Huang 28 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: