我有一个非常基本的系统来学习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
我可以编写自己的makefile,但我很想知道IDE中是否有解决方案。
答案 0 :(得分:2)
您不构建.tpp
个文件。它们仅包含在带有#include
指令的头文件中。
而是将头文件包含在正确的.cpp
源文件中。
答案 1 :(得分:1)
您的.tpp文件与C ++ 源文件关联,而不是与C ++ 模板文件关联。解决这个问题:
进入Eclipse首选项窗口。
C / C ++ - &gt;文件类型
在列文件名中,找到一个包含tpp的扩展名(很可能是* .tpp)并将其删除。
点击新建...
模式:* .tpp
键入:C ++ 标题文件