Неопределенная ссылочная ошибка для шаблонного метода [дубликат]

Я использую пользовательский сценарий, вдохновленный поведением Ben Nolan (я не могу найти текущую ссылку на это больше, печально) сохранить большинство моих обработчиков событий. Эти обработчики событий инициированы именем класса элементов или идентификатором, например. Пример:

Behaviour.register({ 
    'a.delete-post': function(element) {
        element.observe('click', function(event) { ... });
    },

    'a.anotherlink': function(element) {
        element.observe('click', function(event) { ... });
    }

});

мне нравится включать большинство моих библиотек Javascript на лету, кроме тех, которые содержат глобальное поведение. Я использую headScript Платформы Зенда () помощник заполнителя для этого, но Вы можете также использование JavaScript для загрузки других сценариев на лету с Ajile, например.

43
задан curiousguy 16 August 2012 в 17:15
поделиться

3 ответа

Реализация шаблонного кода никогда не должна быть в файле .cpp : ваш компилятор должен видеть их в то же время, когда он видит код, который их вызывает (если вы не используете явное создание экземпляра для создания шаблонного объектного кода, но даже тогда .cpp - это неправильный тип файла для использования ).

Что вам нужно сделать, так это переместить реализацию либо в файл заголовка, либо в такой файл, как VAConfig.t.hpp , а затем #include "VAConfig.t. hpp " всякий раз, когда вы используете какие-либо шаблонные функции-члены.

69
ответ дан 26 November 2019 в 22:51
поделиться

Шаблонный метод - это просто ... шаблон для метода. Аргументы шаблона должны быть заполнены там, где "создается экземпляр" метода.

Должна быть возможность построить компилятор, который будет удовлетворен объявлением шаблонного метода, и на этапе "компиляции шаблона" скомпилировать все необходимое экземпляры метода шаблона.

Это не относится к vc от Microsoft. Однако я слышал, как один из коллег бормотал насчет того, что это имеет место в unix.

Большинство компиляторов создают экземпляр метода шаблона по запросу, где они используются в исходном коде. Чтобы создать экземпляр метода, компилятор должен «увидеть» тело функции шаблона. Вот почему тело чаще всего помещается либо в файл заголовка, либо, например, в файл .h.cpp, который затем включается в качестве последней строки файла .h.

5
ответ дан 26 November 2019 в 22:51
поделиться

Если вы переместите реализацию шаблонных методов (convert и readParameter) в файл заголовка, она должна работать.

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

10
ответ дан 26 November 2019 в 22:51
поделиться
Другие вопросы по тегам:

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