Russian Qt Forum
Ноябрь 23, 2024, 22:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Шаблонный класс с нешаблонными переменными  (Прочитано 3117 раз)
DoubleMix
Гость
« : Май 31, 2011, 10:22 »

Здравствуйте!
Возникла проблема при создании шаблонного списка в Qt. Я никак не могу обратится к нешаблонным переменным в классе.

Вот класс узла:
Код:
template <typename T>
class Node
{
public:
    Node(T node_data) : data(node_data) {}

    Node() {}
    ~Node() {}

    Node *next;
    T data;
    int index;
};

Когда иду дебаггером по коду, то переменная index вообще никак не появляется. Если проводить какие-нибудь операции с ней, то ничего просто не происходит.

Вот класс самого списка, в нем то же самое с переменной count.
Код:
template <typename T>
class List
{
private:
    Node<T> *head;
    Node<T> *tail;
    int count;

    List &operator = (const List &);
    List(const List &right);

public:

    List();
    ~List();

    void operator+=(T &node_data);
    T operator--();
    T operator[](int currentIndex);

    Node<T> * begin()
    {
        return head;
    }

    Node<T> * end()
    {
        //if(tail) return tail->next;
        return 0;
    }

    bool isEmpty();
    void clear();
};

Если в каком-нибудь методе этого класса объявить переменную, то с ней также нельзя работать! Видно лишь то, что приходит в метод (currentIndex, например).

Подскажите, пожалуйста, в чем моя ошибка?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Май 31, 2011, 11:10 »

Код
C++ (Qt)
   Node< int > node;
   node.index = 1;
   qDebug()<<node.index;
Работает. В чём проблема?

----------------------------------------
UPD
Добавил в класс функцию:
Код
C++ (Qt)
   void setIndex(int i)
   {
       index = i;
   }

Код
C++ (Qt)
   Node< int > node;
   node.setIndex( 1 );
   qDebug()<<node.index;
Тоже работает. И дебаггер (gdb) ходит.
Так в чём проблема?
« Последнее редактирование: Май 31, 2011, 11:16 от LisandreL » Записан
DoubleMix
Гость
« Ответ #2 : Июнь 01, 2011, 19:16 »

Спасибо за ответ. Проблема была в том, что компилятор начинает адово тупить, если реализацию методов закинуть в cpp файл(до абсурда доходило: при вызове метода он перескакивал в середину соседнего). Когда перенес всю реализацию в h файл, то завелось.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Июнь 01, 2011, 19:57 »

есть подозрение, что проблема не в компиляторе...
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 22.