未在基类模板中声明成员

时间:2018-12-11 02:17:22

标签: c++ templates

代码包括1个头文件和1个源文件。我已经削减了irrelevent代码,仍然保持了编译错误。

Huffman.h

#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

main.cpp

#include"Huffman.h"
int main()
{
    HuffmanEncode<256> h;
}

成员变量code_len在基类中定义。我不知道为什么它说code_len是不确定的。

1 个答案:

答案 0 :(得分:3)

这是模板的特殊情况。问题在于,在依赖基类code_len(取决于模板参数Huffman)的范围内不会查找非依赖名称size

您可以将名称code_len设置为依赖项,然后仅在实例化时进行查找;那时知道模板参数并且实例化了基类,那么可以在基类的范围内找到名称code_len(类似于非模板基类)。例如

this->code_len[i] = 0;

Huffman<size>::code_len[i] = 0;