Компилятор будет генерировать код для каждого экземпляра шаблона при использовании шаблона во время этапа компиляции. В процессе компиляции и компоновки файлы .cpp преобразуются в чистый объектный или машинный код, который в них содержит ссылки или неопределенные символы, поскольку файлы .h, которые включены в ваш main.cpp, не имеют реализации YET. Они готовы быть связаны с другим объектным файлом, который определяет реализацию для вашего шаблона, и, следовательно, у вас есть полный исполняемый файл a.out. Однако, поскольку шаблоны необходимо обрабатывать на этапе компиляции, чтобы сгенерировать код для каждого экземпляра шаблона, который вы делаете в своей основной программе, ссылка не поможет, поскольку компиляция main.cpp в main.o, а затем компиляция вашего шаблона .cpp в template.o, а затем ссылка не будет достигать цели шаблонов, потому что я связываю различные экземпляры шаблонов с одной и той же реализацией шаблона! И шаблоны должны делать обратное, т. Е. Иметь одну реализацию, но допускать много доступных экземпляров посредством использования одного класса.
Значение typename T
get заменяется во время этапа компиляции, а не на этапе связывания, поэтому, если я попытаюсь для компиляции шаблона без замены T
в качестве конкретного типа значения, чтобы он не работал, потому что это определение шаблонов - это процесс времени компиляции, а мета-программирование btw - все об использовании этого определения.
Немного поздно, но после закрытия я нахожу решение. Кажется, что Google Chrome иногда имеет проблемы на, распознают, что название хостов определило en/etc/hosts.
я использую Linux, и я нахожусь позади прокси.
Попытка, добавляющая в конце сервера имен: пример .localhost
:
В:/etc/hosts:
127.0.0.1 myservername.localhost
На виртуальных хостах Вашей конфигурации сервера необходимо будет переименовать имя сервера. В моем случае я использую апача, таким образом, в/etc/apache/sites-enabled/myserver.conf переименовывают строку старого имени сервера с:
...
ServerName: myservername.localhost
, Если Вы находитесь позади прокси, Вы можете кроме всех хостов, просто добавляющих к no_proxy Вару:
$no_proxy= "localhost"
Наконец не забывают перезапускать сервер и попытку получить доступ на браузере с новым именем сервера.