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

霍夫曼

#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是未定义的。

最佳答案

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

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

this->code_len[i] = 0;

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

关于c++ - 未在基类模板中声明成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53716445/

10-11 00:53