2

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

4

2 回答 2

2

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

相反,您将头文件包含在适当的.cpp源文件中。

于 2012-09-27T16:10:32.553 回答
1

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

进入 Eclipse 首选项窗口。

C/C++ -> 文件类型

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

点击新建...

模式:*.tpp
类型:C++文件

于 2014-07-11T17:24:20.080 回答