我有以下代码
DoubleVector.hpp
#ifndef DOUBLEVECTOR
#define DOUBLEVECTOR
#include <cassert>
template <unsigned int DIM> class DoubleVector
{
private:
double mData[DIM];
public:
double& operator[](int index);
};
#endif
DoubleVector.cpp
#include "DoubleVector.hpp"
double& DoubleVector::operator[](int index){
assert(index < DIM);
assert(index > -1);
return(mData[index]);
}
上面的代码出现在一本关于C ++和科学计算的书中(如果你想我可以告诉你)。本书解释了如何解决在.hpp中具有模板类定义以及在.cpp中实现的问题。 所以它是关于这个问题写的:
该问题的更高级解决方案是显式实例化。如果已知我们只使用具有一小组大小的DoubleVector,那么我们可以强制编译器生成所需的那些,因为它将DoubleVector.cpp编译到目标文件DoubleVector.o中。这是通过在文件DoubleVector.cpp中创建每个所需大小的类的未命名实例来完成的,如下面的代码片段所示。“
#include "DoubleVector.hpp"
template class DoubleVector<5>;
template class DoubleVector<7>;
之后我将上面的代码片段放到DoubleVector.cpp
#include "DoubleVector.hpp"
template class DoubleVector<5>;
template class DoubleVector<7>;
double& DoubleVector::operator[](int index){
assert(index < DIM);
assert(index > -1);
return(mData[index]);
}
我编译时遇到的错误:
g++ -c -O DoubleVector.cpp
是以下
DoubleVector.cpp:7:9: error: ‘template<unsigned int DIM> class
DoubleVector’ used without template parameters double&DoubleVector::operator[](int index)
^
DoubleVector.cpp:7:44: error: ‘double& operator[](int)’ must be a
nonstatic member function double& DoubleVector::operator[](int index)
所以我的问题是我不明白经典的可能解决方案是什么,正如我从论坛中看到的那样,当我们在一个文件中定义了一个文件时使用模板的问题,另一个是实现