C++ 未在基类模板中声明成员

C++ 未在基类模板中声明成员,c++,templates,C++,Templates,代码包括1个头文件和1个源文件。我已经删除了不相关的代码,仍然保留编译错误 哈夫曼 #ifndef HUFFMAN #define HUFFMAN template<int size> class Huffman{ protected: int code_len[size]; int code[size]; void genCode(){ } }; template<int size> class HuffmanEncode :public

代码包括1个头文件和1个源文件。我已经删除了不相关的代码,仍然保留编译错误

哈夫曼

#ifndef HUFFMAN
#define HUFFMAN
template<int size>
class Huffman{
protected:
    int code_len[size];
    int code[size];
    void genCode(){
    }
};
template<int size>
class HuffmanEncode :public Huffman<size>{
public:
    void f(){
        for (int i = 0; i < size; i++){
            code_len[i] = 0;
        }
    }
};
#endif
\ifndef HUFFMAN
#定义哈夫曼
模板
哈夫曼班{
受保护的:
整数代码_len[大小];
int代码[大小];
void genCode(){
}
};
模板
类哈夫曼编码:公共哈夫曼{
公众:
void f(){
对于(int i=0;i
main.cpp

#include"Huffman.h"
int main()
{
    HuffmanEncode<256> h;
}
#包括“Huffman.h”
int main()
{
哈夫曼编码;
}

成员变量
code\u len
在基类中定义。我不知道为什么它说
code\u len
是未定义的。

这是模板的特例。问题是非依赖名称
code\u len
不会在依赖基类
Huffman
的范围内查找(这取决于模板参数
大小

您可以将名称
code\u len
设置为依赖,然后仅在实例化时查找该名称;此时模板参数已经已知,基类已经实例化,那么可以在基类的范围内找到名称
code\u len
(与非模板基类类似)。e、 g

哈夫曼::代码_len[i]=0;
Try
this->code\u len[i]=0我相信这是重复的。我不认为这值得这么多的反对票。这一点都不明显,而且在不知道原因的情况下也不容易找到重复项。请看,我认为您应该在回答中更清楚地说明,具体原因是因为基类是一个模板,其中模板参数依赖于派生类的模板参数。
this->code_len[i] = 0;
Huffman<size>::code_len[i] = 0;