powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос касательно operator[]
3 сообщений из 3, страница 1 из 1
Вопрос касательно operator[]
    #33234709
ils
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ils
Гость
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
Вопрос касательно operator[]
    #33234813
SeraTJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй
TButton* btn777 = (*lstBtn)[2];

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


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