C++ 未在基类模板中声明成员
代码包括1个头文件和1个源文件。我已经删除了不相关的代码,仍然保留编译错误 哈夫曼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
#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;