Название: Наследование от QCache Отправлено: spirits25 от Апрель 25, 2013, 13:08 Всем привет.
Мне понадобилось переопределить метод unlink в классе QCache, для этого нужно унаследоваться от него. Может кто-нибудь подсказать как это правильно сделать? Уже до этого дошёл, всё равно не могу унаследоваться нормально, пишет Цитировать ошибка: undefined reference to `TileCache<MyKeyClass, MyOtherClass>::TileCache(int)' Код: template <class MyKeyClass, class MyOtherClass> Название: Re: Наследование от QCache Отправлено: m_ax от Апрель 25, 2013, 14:40 Всем привет. Мне понадобилось переопределить метод unlink в классе QCache, для этого нужно унаследоваться от него. Может кто-нибудь подсказать как это правильно сделать? Уже до этого дошёл, всё равно не могу унаследоваться нормально, пишет Цитировать ошибка: undefined reference to `TileCache<MyKeyClass, MyOtherClass>::TileCache(int)' Код: template <class MyKeyClass, class MyOtherClass> Это не правильно: Код
Почитайте побольше о шаблонах.. Код
Название: Re: Наследование от QCache Отправлено: spirits25 от Апрель 25, 2013, 15:40 Это не правильно: Код
Почитайте побольше о шаблонах.. Код
На каждый переопределённый метод аля Код: template <class Key, class T> Цитировать ....: ошибка: undefined reference to `TileCache<MyClass1, MyClass2>::setMaxCost(int)' Название: Re: Наследование от QCache Отправлено: m_ax от Апрель 25, 2013, 15:58 На каждый переопределённый метод аля Код: template <class Key, class T> Цитировать ....: ошибка: undefined reference to `TileCache<MyClass1, MyClass2>::setMaxCost(int)' Хотите сказать, это он из вредности пишет?) Название: Re: Наследование от QCache Отправлено: Serr500 от Апрель 25, 2013, 16:00 Что-то Вы какую-то фигню пишете. Зачем Вам в классе, производном от QCache, мембер типа QHash?
Название: Re: Наследование от QCache Отправлено: Alex Custov от Апрель 25, 2013, 16:09 На каждый переопределённый метод аля Код: template <class Key, class T> Цитировать ....: ошибка: undefined reference to `TileCache<MyClass1, MyClass2>::setMaxCost(int)' этот код записан в .h? Да и непонятна задача, метода unlink в QCache нет, а все остальные методы невиртуальные. Название: Re: Наследование от QCache Отправлено: spirits25 от Апрель 25, 2013, 16:38 На каждый переопределённый метод аля Код: template <class Key, class T> Цитировать ....: ошибка: undefined reference to `TileCache<MyClass1, MyClass2>::setMaxCost(int)' этот код записан в .h? Да и непонятна задача, метода unlink в QCache нет, а все остальные методы невиртуальные. Пытался хоть как-нибудь в .cpp засунуть, не получилось, в .h в итоге работает. Вот кусочек из исходников Qt5: Код: template <class Key, class T> Название: Re: Наследование от QCache Отправлено: Alex Custov от Апрель 25, 2013, 16:46 Пытался хоть как-нибудь в .cpp засунуть, не получилось, в .h в итоге работает. Вот кусочек из исходников Qt5: unlink есть (может в qt5 появился, но есть=)), и hash я добавлял, потому что иначе он его не видит (хотя странно почему не видит, должен ведь наследовать). Но спасибо, заработало, хоть и пришлось всё в .h писать. Изучай С++! У тебя целый ряд фундаментальных ошибок. Реализация шаблона должна быть полностью доступна в момент компиляции данного TU, контроль доступа в классе по-умолчанию private, и unlink - внутренний метод, и атрибут hash из QCache недоступен, и объявив свой hash ты его доступным не сделаешь! Название: Re: Наследование от QCache Отправлено: Igors от Апрель 26, 2013, 08:06 unlink есть (может в qt5 появился, но есть=)), и hash я добавлял, потому что иначе он его не видит (хотя странно почему не видит, должен ведь наследовать). Но спасибо, заработало, хоть и пришлось всё в .h писать. А зачем Вам нужен свой unlink? Не вижу разумной цели, там трудно придумать что-то вместо LRUНазвание: Re: Наследование от QCache Отправлено: spirits25 от Апрель 26, 2013, 10:42 Изучай С++! У тебя целый ряд фундаментальных ошибок. Реализация шаблона должна быть полностью доступна в момент компиляции данного TU, контроль доступа в классе по-умолчанию private, и unlink - внутренний метод, и атрибут hash из QCache недоступен, и объявив свой hash ты его доступным не сделаешь! Эм.. именно так у меня работает=) Название: Re: Наследование от QCache Отправлено: spirits25 от Апрель 26, 2013, 10:43 А зачем Вам нужен свой unlink? Не вижу разумной цели, там трудно придумать что-то вместо LRU Нужно в момент удаления объекта (delete указателя) сделать с ним кое-что. Название: Re: Наследование от QCache Отправлено: Syveren от Апрель 26, 2013, 12:31 Когда QChach удаляет элементы с помощью delete.
Если перед удалением с ним нужно что-либо сделать, это можно описать в деструкторе класса. Название: Re: Наследование от QCache Отправлено: spirits25 от Апрель 26, 2013, 13:10 Когда QChach удаляет элементы с помощью delete. Если перед удалением с ним нужно что-либо сделать, это можно описать в деструкторе класса. Этот класс переопределить (наследоваться от него) гораздо тяжелее и затратнее, чем от QCache (именно в моём случае). Название: Re: Наследование от QCache Отправлено: Alex Custov от Апрель 26, 2013, 14:59 Эм.. именно так у меня работает=) Это не может работать, приложи минимальный проект где это работает, и где будет только унаследованный от QCache класс и main(), где он используется. Название: Re: Наследование от QCache Отправлено: Igors от Апрель 26, 2013, 15:13 Этот класс переопределить (наследоваться от него) гораздо тяжелее и затратнее, чем от QCache (именно в моём случае). Трудновато представить такой вариант :) Ну хорошо, Ваша задача, Вам виднее, но тогда почему не класс-обертка кешируемого? |