проблема компиляции с разными версиями gcc

gcc версии 4.4.6 успешно компилирует код. Но версия gcc 4.8.1 дает ошибку компиляции.

/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <iostream>

using namespace std;

class AbstractHashSet
{
    protected :
    int size;
    float load_factor;
    int current_limit;
    public :
    AbstractHashSet() : size(0), load_factor(0.75), current_limit(0){}
    int getSize(void) const { return size; }
    bool isEmpty(void) const { return size == 0; }
    float getLoadFactor(void) const {   return load_factor; }
    int getCapacity(void) const { return current_limit; }
    static int get_preferred_size(int n);
};

template<class KEY>
struct HashSetBaseElement
{
    KEY key;
    HashSetBaseElement *next;
    HashSetBaseElement(KEY k) : key(k),next(NULL){}
    virtual ~HashSetBaseElement(){}
};

template<class KEY>
class HashSetBase : public AbstractHashSet
{
    public :
    bool contains(KEY key)
    {
        if (size == 0) return false;
        return get_element(key) != NULL;
    }
    protected :
    HashSetBaseElement<KEY> *get_element(KEY key)
    {
        return NULL;
    }
};

template<class KEY>
class HashSet : public HashSetBase<KEY>
{
    public :
    HashSet(int n = 10)
    {
        HashSetBase<KEY>::setCapacity(n);
    }
    bool add(KEY key)
    {
        HashSetBaseElement<KEY> *e = get_element(key);
        if (e) return false;
        e =  new HashSetBaseElement<KEY>(key);
        return true;
    }
};
template<class KEY_T, class VALUE_T>
class HashMap : public HashSetBase<KEY_T>
{
    protected :
    struct Entry : public HashSetBaseElement<KEY_T>
    {
        VALUE_T value;
        Entry(KEY_T key, VALUE_T value) : HashSetBaseElement<KEY_T>(key), value(value){}
    };
    VALUE_T empty_value;

    public:
    VALUE_T &get(KEY_T key)
        {
            Entry *e = (Entry*)get_element(key);
            if (e) return e->value;
            return empty_value;
        }       
};

    struct Space
        {
            friend bool operator<(const Space &a, const Space &b)   
            {   return true;    }
            friend bool operator>(const Space &a, const Space &b)   
            {   return true;    }
        };
int main()
{    
    HashMap<int,Space*> pos_map;
    pos_map.get(100);
    cout<<"Hello World";

    return 0;
}

Ошибка компиляции:

Ошибка (и): source_file.cpp: при создании экземпляра ‘VALUE_T & HashMap :: get (KEY_T) [с KEY_T = int; VALUE_T = Пробел *] ’: source_file.cpp: 98: 20: отсюда требуется

source_file.cpp: 82: 34: ошибка: «get_element» не был объявлен в этой области, и никакие объявления не были найдены зависимым от аргументов поиском в точке создания экземпляра [-fpermissive]

Запись e = (Запись) get_element (ключ);

source_file.cpp: 82: 34: примечание: объявления в зависимой базе -> «HashSetBase» не найдены неквалифицированным поиском

source_file.cpp: 82: 34: примечание: используйте вместо этого ‘this-> get_element’


person Rukunujjaman Miaji    schedule 28.10.2019    source источник
comment
Попробуйте это - ›get_element   -  person Taekahn    schedule 28.10.2019
comment
Спасибо за отзыв. Я уже пробовал это, но не вышло.   -  person Rukunujjaman Miaji    schedule 29.10.2019
comment
Вы должны добавить минимальный воспроизводимый пример. Ваш код не компилируется, поскольку, например, не объявлены метод clear() и значение empty_value.   -  person Benjamin Bihler    schedule 29.10.2019
comment
Извините за это, пожалуйста, найдите исходный код этого компилятора: rextester.com/JENY4459   -  person Rukunujjaman Miaji    schedule 30.10.2019
comment
или смотрите вверху.   -  person Rukunujjaman Miaji    schedule 30.10.2019


Ответы (1)


наконец, я решил проблему, изменив эту строку кода: this-> get_element;

person Rukunujjaman Miaji    schedule 30.10.2019
comment
Итак, что я предложил? - person Taekahn; 31.10.2019
comment
спасибо, но в первый раз он не работает, это может быть проблема с модификатором доступа. - person Rukunujjaman Miaji; 31.10.2019