我必须将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