У меня есть очень простая система, которую я использую для изучения шаблонов C ++. Насколько я понимаю, нужно включить определение шаблона в файл объявления шаблона и скомпилировать его вместо реализации, например так:
/*LINKEDLIST.H*********************************/
#ifndef LINKEDLIST_H_
#define LINKEDLIST_H_
#include "node.h"
template <typename T>
class linkedlist {
/*..*/
};
#include "linkedlist.tpp"
/*LINKEDLIST.TPP*********************************/
#include "node.h"
template<typename T>
linkedlist<T>::linkedlist() {
/*..*/
}
Как я могу получить Eclipse CDT для компиляции заголовочных файлов для шаблонов? Кажется, что он пытается скомпилировать файлы шаблона сами и дает мне linker input file unused because linking not done
ошибки.
Building file: ../linkedlist.tpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"linkedlist.d" -MT"linkedlist.d" -o "linkedlist.o" "../linkedlist.tpp"g++.exe: warning: ../linkedlist.tpp: linker input file unused
Я могу написать свой собственный make-файл, но мне интересно посмотреть, есть ли решение этой проблемы в IDE.
Вы не строите .tpp
файлы. Они включены только в заголовочные файлы с #include
директивы.
Вместо этого вы включаете заголовочный файл в правильное .cpp
исходный файл.
Ваши файлы .tpp связаны как C ++ Источник Файлы вместо C ++ шаблон Файлы. Чтобы исправить это:
Войдите в окно настроек Eclipse.
C / C ++ -> Типы файлов
В столбце Имя файла найдите расширение с tpp в нем (скорее всего, * .tpp) и удалите его.
Нажмите Новый …
Pattern: * .tpp
Тип: C ++ заголовок файл