Android 访问模板类时出现“类型不完整”错误

Android 访问模板类时出现“类型不完整”错误,android,c++,android-ndk,java-native-interface,incomplete-type,Android,C++,Android Ndk,Java Native Interface,Incomplete Type,我有一个包含缓冲区模板类的SignalProcessingBlock类。 这就是它们的样子: SignalProcessingBlock.h: class SignalProcessingBlock{ public: Buffer <class BufferClass> *InputBuffer; Buffer <class BufferClass> *OutputBuffer; SignalProcessingBlock *FrontSignalPro

我有一个包含缓冲区模板类的SignalProcessingBlock类。 这就是它们的样子:

SignalProcessingBlock.h:

class SignalProcessingBlock{

public:

Buffer <class BufferClass>  *InputBuffer;

Buffer <class BufferClass>  *OutputBuffer;

SignalProcessingBlock   *FrontSignalProcessingBlock;

    void Process();
};

SignalProcessingBlock.cpp:
#include "SignalProcessingBlock.h"
void SignalProcessingBlock::Process()

{
    double tmp;

    for (int i=0;i<(this->InputBuffer->BufferSize/2);i++)

    {

        this->OutputBuffer->buffer[i] = this->InputBuffer->buffer[i*2];

        tmp=this->OutputBuffer->buffer[i];

    }

}

Buffer.h:

template <class BufferClass> class Buffer
{
public:

int         BufferSize;

BufferClass buffer[];

Buffer (BufferClass *buffer,int BufferSize);
};

Buffer.cpp:
#include "Buffer.h"

template <class BufferClass> 

Buffer <BufferClass>::Buffer(BufferClass *buffer,int BufferSize)
{

this->buffer=buffer;

this->BufferSize=BufferSize;
}
甚至在我尝试执行所需操作之前,我会得到以下错误行:

jni/SignalProcessingBlock.cpp:34:47: error: definition of implicitly-declared 'SignalProcessingBlock::~SignalProcessingBlock()'
In file included from jni/SignalProcessingBlock.h:4:0,
                 from jni/SignalProcessingBlock.cpp:1:
jni/Buffer.h: In instantiation of 'Buffer<BufferClass>':
jni/SignalProcessingBlock.cpp:42:35:   instantiated from here
jni/Buffer.h:9:21: error: 'Buffer<BufferClass>::buffer' has incomplete type
jni/SignalProcessingBlock.h:11:16: error: forward declaration of 'struct BufferClass'
jni/SignalProcessingBlock.cpp: In member function 'void SignalProcessingBlock::Process()':
jni/SignalProcessingBlock.cpp:44:23: error: 'class Buffer<BufferClass>' has no member named 'buffer'
jni/SignalProcessingBlock.cpp:44:54: error: 'class Buffer<BufferClass>' has no member named 'buffer'
jni/SignalProcessingBlock.cpp:45:27: error: 'class Buffer<BufferClass>' has no member named 'buffer'
/cygdrive/d/Development/NDK/android-ndk-r9/build/core/build-binary.mk:348: recipe for target 'obj/local/armeabi-v7a/objs-debug/com_talkitt_beta_NativeWrapper/SignalProcessingBlock.o' failed
make: *** [obj/local/armeabi-v7a/objs-debug/com_talkitt_beta_NativeWrapper/SignalProcessingBlock.o] Error 1

我用C++编写,使用Eclipse朱诺,调试和构建是用NDK Bug make命令包装器执行的。 我做的一切都是照本宣科,不理解错误,我有缓冲区成员,语法似乎是正确的

非常感谢你的帮助


顺便说一下,堆栈溢出告诉我,出于某种原因,我需要添加更多的信息,所以我只编写了stuff,在模板类Buffer的定义中,token BufferClass是模板的参数。稍后在声明要使用的缓冲区对象的类型时,需要专门化模板,或者换句话说,指定要用作模板参数的实际类型

在您的特定情况下,如果需要一个包含双值数组的缓冲区实例,可以执行以下操作:

#include "Buffer.h"
class SignalProcessingBlock{

public:
  Buffer <double>  *InputBuffer;
  ...

缓冲区定义在哪里?是否缺少包含?@SleuthEye请向下滚动查看缓冲区的定义是的,但我在创建实例之前就出现了一个错误,正如我在原始帖子中所写的那样。@user3378878您需要为要实例化的对象指定完整的类型,这是具有特定类型的专用模板,如我的代码示例中所示,在声明InputBuffer的类型时,我将类BufferClass替换为double。希望这能澄清这一点。@user3378878我不想有一个特定的类型-我想有一个通用缓冲区这些输入可以是int、double、float、bool或其他任何类型,目前还没有根据它们的类型实现不同的函数。您向我展示的是模板专门化,我现在不想要它。@user3378878不同类型的缓冲区上的操作本质上是不同的,因为映射到机器代码。例如,双精度的赋值必须复制8个字节,而int的赋值通常复制4个字节。但是,您可以通过使SignalProcessingBlock也成为一个模板类来推迟模板专门化。。问题是我需要SimulalPultBug块以后也要虚拟,C++不需要虚拟模板类…
#include "Buffer.h"
template <class BufferClass> class SignalProcessingBlock{

public:
  Buffer <typename BufferClass>  *InputBuffer;
  ...