错误:...没有模板参数使用

时间:2017-12-05 15:57:00

标签: c++ class templates

我有以下代码

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)

所以我的问题是我不明白经典的可能解决方案是什么,正如我从论坛中看到的那样,当我们在一个文件中定义了一个文件时使用模板的问题,另一个是实现

0 个答案:

没有答案