模板类多文件项目 - 如何
Template Classes Multiple-File Project - How to?
可能的重复:
为什么仅在标题文件中实现模板?
为什么将模板类的实现和声明在同一标头文件中?
我正在研究一个需要"堆栈"来保存数据的项目。但是我不想为每种文件类型编码不同的版本(而且我不想使用向量)。
所以我正在尝试使用模板类,这是我的代码:
structstack.h
#ifndef STRUCTSTACK_H_
#define STRUCTSTACK_H_
template <class AnyType> class StructStack {
StructStack();
~StructStack();
struct Element {
Element *pointer;
AnyType value;
};
Element *pointerToLastElement;
int stackSize;
int pop();
void push(int value);
int size();
};
#endif
structstack.cpp
#include "stdafx.h"
#include "StructStack.h"
#include <iostream>
using namespace std;
template <class AnyType> void StructStack<AnyType>::StructStack() {
//code
}
template <class AnyType> void StructStack<AnyType>::~StructStack() {
//code
}
template <class AnyType> AnyType StructStack<AnyType>::pop() {
//code
}
template <class AnyType> void StructStack<AnyType>::push(AnyType value){
//code
}
template <class AnyType> AnyType StructStack<AnyType>::size() {
//code
}
如果我尝试编译这两个文件,我会遇到很多编译错误。我在线阅读,很难在一个多文件项目中创建模板类。
那么如何完成?
您可以通过将所有定义(当前在StructStack.cpp
中)放入StructStack.h
中解决此问题,然后删除前者。编译器需要访问实现代码,以便可以根据需要实例化类模板。
您只需要将功能的定义放在标题文件中即可。您在StructStack.cpp
中写的所有内容都应在类别定义后的StructStack.h
中进行。
需要使用它的每个文件都需要看到模板代码。
在专门或使用之前,它不会被编译。
基本上,如果要在不同的文件中使用它,则必须将其放入标题文件中,然后包含它。当您实际使用具有特定类型的模板时,将在上下文中生成代码。
c 模板代码应始终放入标题文件中,以便在每个翻译单元中可见实现,您希望在其中实例化模板。如果您愿意,可以将代码分离为 *.h and *.cpp文件,但是您仍然应该在 *.h文件末尾的#include *.cpp文件。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何维护资源管理器项目视图中当前可见的项目列表
- 如何将 CLion C++ 项目导入 Visual Studio?
- Visual Studio 中的 CMake 项目:如何添加其他包含和库目录?
- 如何返回或护理项目清单基于几个类别
- 如何在大型c++项目的可视化代码中设置调试
- 如何从 std::vector 搜索和返回项目
- 如何更改QComboBox项目的高度大小?
- CMake:find_package中的项目如何破坏程序?
- C MakeFile项目如何使用相同的Basename加上后缀和相同扩展名创建文件列表
- C++/CLI 项目如何在控制台窗口中显示消息
- Qcombobox设置标题文本,无论项目如何
- 我的项目如何在没有提示的情况下不抱怨未解决的未支出
- 模板类多文件项目 - 如何
- Google测试单独的项目 - 如何获得针对C 项目的测试
- 一个解决方案,两个项目:如何从 Windows 应用程序调用控制台项目?C++
- C++/CLI 项目如何引用可移植类库
- C++银行项目;如何将一组字符串读取为单独的浮点数并添加它们
- 将空格字符添加到附加的每个项目,以必须擦除最后一个项目.如何改进
- C++:新建空项目(如何创建,添加main方法并打印"Hello, world")?