模板代码的链接错误
link errors with template code
我有三个文件-main、Array.hh和Array.cc。当我执行"g++main.cc Array.cc"时,我会收到各种链接器错误,例如:"未定义对Array<<\double>>的引用::Array(int)"
我阅读了其他关于模板链接器错误的stackoverflow条目,但他们建议拆分HH和CC文件,我已经这样做了。那么这里的问题是什么呢?
编辑:谢谢你的回复。我以前读过的帖子我都不懂。将Array.cc合并到Array.hh中可以解决问题。关闭
main.cc:
#include "Array.hh"
#include <iostream>
int main() {
Array<int> anArray(12);
Array<double> adArray(12);
for (int nCount = 0; nCount < 12; nCount++) {
anArray[nCount] = nCount;
adArray[nCount] = nCount + 0.5;
}
for (int nCount = 11; nCount >= 0; nCount--)
std::cout << anArray[nCount] << "t" << adArray[nCount]
<< std::endl;
return 0;
}
Array.hh:
template <typename T>
class Array {
private:
int m_nLength;
T *m_ptData;
public:
Array();
Array(int nLength);
~Array();
void Erase();
T& operator[](int nIndex);
int GetLength();
};
Array.cc
#include "Array.hh"
template <typename T>
Array<T>::Array() {
m_nLength = 0;
m_ptData = 0;
}
template <typename T>
Array<T>::Array(int nLength) {
m_ptData= new T[nLength];
m_nLength = nLength;
}
template <typename T>
Array<T>::~Array() { delete[] m_ptData; }
template <typename T>
void Array<T>::Erase() {
delete[] m_ptData;
m_ptData= 0;
m_nLength = 0;
}
template <typename T>
int Array<T>::GetLength() { return m_nLength; }
将定义从Array.cc放入Array.hh
使用模板类时,会创建一个类。Array.cc不知道应该从模板中创建哪些类,只有main.cc知道。main.cc不知道如何创建类,因为它不知道Array成员函数的定义,只有Array.cc知道。
您需要#include "Array.cc"
如果定义不可用,则无法实例化模板。
定义和声明的这种分离是可以的,但必须包括cc
文件,在该文件中,您将使用新类型来安装该模板
您的建议不太准确。您不应该将模板分为.h和.cpp文件。如果你坚持要把它们分开,"导出"就是你要找的关键词。有关"导出"的更多信息,请查看此处:http://www.parashift.com/c++-faq/selecte-template-fn-defn-from-decl-export-keyword.html。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误