LINUX.ORG.RU

История изменений

Исправление rumgot, (текущая версия) :

Вандевурд, Дэвид, Джосаттис, Николаи М., Грегор, Дуглас. Шаблоны C++. Справочник разработчика, 2-е изд Глава 9.1.1:

Компилятор C++, вероятно, примет эту программу без каких-либо проблем, но компоновщик, скорее всего, сообщит об ошибке отсутствия определения функции printTypeof(). Причиной этой ошибки является то, что определение шаблона функции printTypeof() не инстанцировано. Чтобы шаблон был инстанцирован, компи­лятор должен знать, какие определения должны быть инстанцированы и для ка­ких именно аргументов шаблона. К сожалению, в предыдущем примере эти две части информации находятся в файлах, компилируемых по отдельности. Таким образом, когда наш компилятор видит вызов printTypeof (), но не имеет опре­деления шаблона, чтобы инстанцировать его для double, он просто предполага­ет, что такое определение представлено в другом месте, и создает для этого опре­деления соответствующую ссылку (разрешаемую компоновщиком). С другой стороны, когда компилятор обрабатывает файл myfirst.срр, он не имеет ника­ких указаний о том, что он должен инстанцировать определение содержащегося в нем шаблона для некоторых конкретных аргументов.

Далее Глава 9.1.2 9.1.2. Шаблоны в заголовочных файлах Обычное решение описанной проблемы заключается в использовании того же подхода, что и для макросов или встраиваемых функций: мы включаем определе­ния шаблона в заголовочный файл, объявляющий этот шаблон.

Исправление rumgot, :

Вандевурд, Дэвид, Джосаттис, Николаи М., Грегор, Дуглас. Шаблоны C++. Справочник разработчика, 2-е изд Глава 9.1.1:

Компилятор C++, вероятно, примет эту программу без каких-либо проблем, но компоновщик, скорее всего, сообщит об ошибке отсутствия определения функции printTypeof(). Причиной этой ошибки является то, что определение шаблона функции printTypeof() не инстанцировано. Чтобы шаблон был инстанцирован, компи­лятор должен знать, какие определения должны быть инстанцированы и для ка­ких именно аргументов шаблона. К сожалению, в предыдущем примере эти две части информации находятся в файлах, компилируемых по отдельности. Таким образом, когда наш компилятор видит вызов printTypeof (), но не имеет опре­деления шаблона, чтобы инстанцировать его для double, он просто предполага­ет, что такое определение представлено в другом месте, и создает для этого опре­деления соответствующую ссылку (разрешаемую компоновщиком). С другой стороны, когда компилятор обрабатывает файл myfirst.срр, он не имеет ника­ких указаний о том, что он должен инстанцировать определение содержащегося в нем шаблона для некоторых конкретных аргументов.

Исходная версия rumgot, :

Вандевурд, Дэвид, Джосаттис, Николаи М., Грегор, Дуглас. Шаблоны C++. Справочник разработчика, 2-е изд Глава 9.1.1:

Компилятор C++, вероятно, примет эту программу без каких-либо проблем, но компоновщик, скорее всего, сообщит об ошибке отсутствия определения функции printTypeof(). Причиной этой ошибки является то, что определение шаблона функции printTypeof() не инстанцировано. Чтобы шаблон был инстанцирован, компи­лятор должен знать, какие определения должны быть инстанцированы и для ка­ких именно аргументов шаблона. К сожалению, в предыдущем примере эти две части информации находятся в файлах, компилируемых по отдельности. Таким образом, когда наш компилятор видит вызов printTypeof (), но не имеет опре­деления шаблона, чтобы инстанцировать его для double, он просто предполага­ет, что такое определение представлено в другом месте, и создает для этого опре­деления соответствующую ссылку (разрешаемую компоновщиком). С другой стороны, когда компилятор обрабатывает файл myfirst. срр, он не имеет ника­ких указаний о том, что он должен инстанцировать определение содержащегося в нем шаблона для некоторых конкретных аргументов.