Eclipse CDT和编译C ++模板

时间:2012-09-27 16:01:46

标签: c++ templates build eclipse-cdt

我有一个非常基本的系统来学习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中是否有解决方案。

2 个答案:

答案 0 :(得分:2)

您不构建.tpp个文件。它们仅包含在带有#include指令的头文件中。

而是将头文件包含在正确的.cpp源文件中。

答案 1 :(得分:1)

您的.tpp文件与C ++ 文件关联,而不是与C ++ 模板文件关联。解决这个问题:

进入Eclipse首选项窗口。

C / C ++ - &gt;文件类型

在列文件名中,找到一个包含tpp的扩展名(很可能是* .tpp)并将其删除。

点击新建...

模式:* .tpp
键入:C ++ 标题文件