Ошибка с потоками

#c #pthreads

#c #pthreads

Вопрос:

Эй, ребята, у меня возникли небольшие проблемы с этим фрагментом кода. Я не вижу в этом ничего плохого. но это дает мне такие ошибки, как

hw2.cpp: 35: ошибка: запрос для члена ‘max2’ в ‘my_data’, который не относится к классу типа ‘thread_data *’ hw2.cpp: 35: ошибка: запрос для члена ‘max’ в ‘my_data’, который не относится к классу типа ‘thread_data *’hw2.cpp:36: ошибка: запрос члена ‘max’ в ‘my_data’, который не относится к классу ‘thread_data *’ hw2.cpp:39: ошибка: запрос члена ‘max2’ в ‘my_data’, который не относится к классу ‘thread_data *’hw2.cpp:40: ошибка: запрос члена ‘max2’ в ‘my_data’, который не относится к классу ‘thread_data *’

     struct thread_data
        {
          char *file_name;
          int max;
          int max2;
        };

        struct thread_data thread_data_array[NUM_THREAD];

        void *FindNum(void *threadArg)
        {
          int in_num;
          struct thread_data *my_data;
          my_data = (struct thread_data *) threadArg;
  file.open (my_data.file_name);                                                   
  if (file.is_open())                                                                
  cout << "file can not be file"<<endl;  

          while (!file.eof())
            {
              file >> in_num;
              if (in_num > my_data.max){
                my_data.max2 = my_data.max;
                my_data.max = in_num;
              }

              else if (in_num > my_data.max2){
                my_data.max2 = in_num;
              }

            }

          pthread_exit(NULL);
        }
  

Ответ №1:

Ну, my_data это указатель на структуру, а не на структуру. Вы должны использовать разыменование ( * ), чтобы добраться до структуры. Попробуйте:

 my_data->max2 = my_data->max
  

В основном my_data->max2 это синтаксический сахар для (*my_data).max2 .