Член не был объявлен в шаблоне базового класса - PullRequest
0 голосов
/ 11 декабря 2018

Коды содержат 1 заголовочный файл и 1 исходный файл.Я обрезал коды неисправимых сообщений и все еще сохраняю ошибку компиляции.

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 голосов
/ 11 декабря 2018

Это особый случай для шаблонов.Проблема в том, что независимое имя code_len не будет найдено в области видимости зависимого базового класса Huffman (который зависит от параметра шаблона size).

Вы можете сделать имя code_len зависимым, тогда оно будет найдено только во время создания экземпляра;в то время аргумент шаблона был известен, и базовый класс был создан, тогда имя code_len можно было бы найти в области действия базового класса (например, не шаблонного базового класса).например,

this->code_len[i] = 0;

или

Huffman<size>::code_len[i] = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...