Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос касательно operator[] / 3 сообщений из 3, страница 1 из 1
25.08.2005, 17:26
    #33234709
ils
ils
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос касательно operator[]
CBuilder 6
Есть, например, такой список
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
template<class T> class List {
      struct Node {
            Node* pre;
            Node* nex;
            T data;
            int indx;
            Node(Node* p,Node* n, const T& dt): pre(p),nex(n),data(dt) {indx =  0 ;};
      };
      Node* head;
      Node* cur;
      Node* end;

public:
      
      List(const T& t): head(new Node( 0 , 0 ,t)) {
            cur = end = head;
            count =  1 ;
            //cur->pre = 0;
            //cur->nex = 0;
      }


      T first() {cur = head; return cur->data;}
      T add(T);
      //T del(T);
      T next();
      T prev();
      T curr() {return cur->data;}
      T last() {cur = end; return cur->data;}

      int count;
      T& operator[](int);

      ~List();
};

Вот реализация operator[]
Код: plaintext
1.
2.
3.
4.
5.
template<class T> T& List<T>::operator[](int i) {
      for (Node* p = head; p !=  0 ; p = p->nex) {
          if (p->indx == i) return p->data;
      }
      
}

Далее, в основной программе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
lstBtn = new List<TButton*>(Button1);
   lstBtn->add(Button2);
   lstBtn->add(Button3);
   lstBtn->add(Button4);

   // Здесь все нормально   
  TButton* btn = lstBtn->operator []( 2 );
   
  // А такая форма записи вызывает ошибку 
  // E2034 Cannot convert 'List<TButton *>' to 'TButton *'
   TButton* btn777 = lstBtn[ 2 ];
   

  // Здесь, соответственно, все нормально   
  for (int i =  0 ; i < lstBtn->count; i++)
         Memo1->Lines->Add(lstBtn->operator [](i)->Caption);

   
  // А так - ошибка 
  //E2288 Pointer to structure required on left side of -> or ->*	   
   for (int i =  0 ; i < lstBtn->count; i++)
         Memo1->Lines->Add(lstBtn[i]->Caption);

Ну и, собственно, вопрос: где тут собака зарыта?
Хелп, плиз
...
Рейтинг: 0 / 0
25.08.2005, 17:56
    #33234813
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос касательно operator[]
Попробуй
TButton* btn777 = (*lstBtn)[2];

у тебя ведь lstBtn -- это не объект класса, а указатель на него!
Вот поэтому неплохо пользоваться венгерской нотацией, тогда сразу было бы понятно: pLstBtn.
...
Рейтинг: 0 / 0
25.08.2005, 17:58
    #33234818
ils
ils
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос касательно operator[]
Надо мне было сначала по топикам пробежаться
Это уже обсуждалось
Все, спасибо, тема закрыта.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос касательно operator[] / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]