我看了很多,尝试了一些我在stackoverflow和其他网站上找到的东西,但我仍然无法弄清楚如何解决这个问题......
主C ++文件:source.cpp
#include "sources.h"
#include "fft_windows.h"
...
source.h
#include "Array2D.h"
...
Array2D.h
#ifndef ARRAY2D_H_
#define ARRAY2D_H_
#include <cassert>
#include "Features.h"
template <class T> class Array2D{
...
};
#endif
Features.h
#ifndef FEATURES_H_
#define FEATURES_H_
#include <string>
using namespace std ;
class Features : public Array2D {
...
};
#endif
fft_window.h(在fft_window.cpp中定义的函数声明)
//#include "Array2D.h"
template <class T>class Array2D;
void random_example(unsigned int i, Array2D <double> &arr);
...
我已经尝试了我发现的所有内容,由于某种原因,我仍然在class Features : public Array2D {
行的Features.h中收到此错误...
有什么想法吗?
答案 0 :(得分:3)
Array2D
不是一个班级。 Array2D<int>
是,或Array2D<float>
答案 1 :(得分:1)
Array2D
在Array2D.h
文件中声明,您在template class
中使用Features.h
而没有#include"Array2D.h"
。包含该文件,并删除包含Feature.h
以确保没有递归包含。
此外,Array2D
应与模板参数一起使用,例如<int>
,<char>
,<T>
等。
答案 2 :(得分:1)
首先,Features.h
需要包含Array2D.h
,其次是你获得无限包含递归,第三,你需要在继承Array2D
时指定模板参数:
class Features : public Array2D<int> {
// example --- ^^^