如何为包含模板类的命名空间创建.hpp?

时间:2017-05-22 17:29:13

标签: c++ templates header

我必须将C ++用于项目(通常做Haskell和C) 我完全挂在命名空间的标题上。 当我离开" arrays.hpp"并直接包括 " arrays.cpp"进入其他文件(这是不好的做法,我知道)。 代码工作正常,但是当我尝试为下面的代码定义头时它不再起作用(当然,我仍然将所有.cpps传递给g ++)。 我已经阅读了关于该主题的几篇Stack Overflow帖子, 但是所提出的解决方案都没有对我有用, 所以如果你能告诉我这段代码的标题看起来如何,我真的很感激。

#include <vector>
#include <stdlib.h>

#include "arrays.hpp"

namespace Arrays {
  template<typename Field> class Array {
    private:
    int rank;
    int* shape;
    Field* data;
    public:
    Array(int _rank, int* _shape, Field* _data) {
      rank = _rank;
      shape = _shape;
      data = _data;
    }
    Array(std::vector<Field> vector) {
      rank = 1;
      shape = (int*)malloc(sizeof(int));
      shape[0] = (int)vector.size();
      data = (Field*)malloc(sizeof(Field)*vector.size());
      for(int i = 0; i < vector.size(); i++)
        data[i] = vector[i];
    }
  };
}

这是我到目前为止所尝试的内容:

#ifndef ARRAYS_HPP

#define ARRAYS_HPP

namespace Arrays {
  template<typename Field> class Array;
}

#endif

这是G ++在使用g++ *.cpp调用它后的响应:

error: variable ‘Arrays::Array<int> array’ has initializer but incomplete type

0 个答案:

没有答案