2016-12-19 6 views
-7

Я не знаю, что я делаю неправильно.Ошибка *** не имеет члена по имени ***

У вас есть идеи, что я делаю неправильно? Структура была объявлена ​​в заголовочном файле sender.h - код ниже

После попытки скомпилировать эту программу, я получил эту ошибку:

Sender/Sender.c: In function 'SenderCreate': 
Sender/Sender.c:50: error: 'Sender' has no member named 'sim_buf' 
Sender/Sender.c:51: error: 'Sender' has no member named 'sim_buf_length' 
Sender/Sender.c: In function 'SenderExecuteTask': 
Sender/Sender.c:75: error: 'sim_buf_length' undeclared (first use in this function) 
Sender/Sender.c:75: error: (Each undeclared identifier is reported only once 
Sender/Sender.c:75: error: for each function it appears in.) 
Sender/Sender.c:77: error: 'sim_buf' undeclared (first use in this function) 
make: *** [Sender.o] Error 1 

код программы ниже:

#include <stdlib.h> // calloc, free 
#include <stdio.h> 
#include "Sender.h" 
#include <fcntl.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <sys/select.h> 
#include <arpa/inet.h> 
#include "../../rdo_module/readout_dev.h" 

struct Sender_s { 
    ET4DataSource *data_source; 
    unsigned int num_of_images; 
    unsigned int num_of_el; 
    ConditionWait *condition_wait; 
    int sock; 
    struct sockaddr *PC; 
    char *sim_buf; 
    char *sim_buf_length; 
}; 

void SenderSetNumOfEl(Sender *self, unsigned int num_of_el) { 
    self->num_of_el = num_of_el; 
} 

Sender * 
SenderCreate(ET4DataSource *data_source, 
      unsigned int num_of_images, 
      unsigned int num_of_el, 
      ConditionWait *condition_wait, 
      int sock, 
      struct sockaddr *PC, 
     char *sim_buf,     // here I get some problems 
     int *sim_buf_length)   // and here 
{ 
    #ifdef DEBUG 
     printf("Sender.c SenderCreate line 25: Sender *self = calloc(1, sizeof(Sender));\n"); 
    #endif 

    Sender *self = calloc(1, sizeof(Sender)); 

    #ifdef DEBUG 
     printf("Sender.c SenderCreate line 25: success\n"); 
    #endif 

    self->data_source = data_source; 
    self->num_of_images = num_of_images; 
    self->num_of_el = num_of_el; 
    self->condition_wait = condition_wait; 
    self->sock = sock; 
    self->PC = PC; 
    self->sim_buf = sim_buf; 
    self->sim_buf_length = sim_buf_length; 

    return self; 
} 

void 
SenderDestroy(Sender *self) 
{ 
    free(self); 
} 

void * 
SenderExecuteTask(void *self_) 
{ 
    Sender *self = self_; 
    ET4Buffer *buf = NULL; 
    int n = 0; 
    int c_len = sizeof(*(self->PC)); 

    while(1) { 
      if(*sim_buf_length) { 

       n=sendto(self->sock, sim_buf, *sim_buf_length, 0, self->PC, c_len); 

       if(n < 0) { 
        perror("error in sendto()"); 
        return NULL; 
       } 
    } 

    return NULL; 
} 

код отправителя. h ниже:

#ifndef __SENDER_H__ 
#define __SENDER_H__ 

#include <sys/socket.h> 
#include <sys/select.h> 
#include <arpa/inet.h> 
#include "../Utils/ConditionWait.h" 
#include "../DataSource/ET4DataSource.h" 

typedef struct Sender_s Sender; 

Sender * 
SenderCreate(ET4DataSource *data_source, 
      unsigned int num_of_images, 
      unsigned int num_of_el, 
      ConditionWait *condition_wait, 
      int sock, 
      struct sockaddr *PC, 
     char *sim_buf, 
     int *sim_buf_length); 

void 
SenderDestroy(Sender*self); 

void * 
SenderExecuteTask(void *self_); 

void SenderSetNumOfEl(Sender *self, unsigned int num_of_el); 

#endif /*__SENDER_MAKER_H__*/ 
+0

Возможно, вы забыли оставить свой файл. –

+0

'#include" Sender.h "(Capital S) и' Код sender.h ниже: '(Lower S). Это предназначено? Файл 'Sender.h' еще не отправлен. – chux

+0

Я сделал ошибку в сообщении. Конечно, имя файла в порядке - Sender.h – awadolko

ответ

0

Сообщения об ошибках и источник в вопросе не совпадают!

Когда я беру исходный текст, компилятор сообщает, что не так.

  • Там не является членом sim_buf_length, (обратите внимание, что делает не жалуются sim_buf_length_flag)
  • Я не получить сообщение об ошибке «Ошибка:„Отправитель“не имеет член с именем" sim_buf» , потому что член явно присутствует
  • Кроме типы char* (член Sender_s) и int* (SenderCreate аргумент), не совпадают

Сообщения об ошибках для функции SenderExecuteTask понятны, нет переменных, объявленных sim_buf или sim_buf_length(_flag). Возможно, функция подписи должна была

void *SenderExecuteTask(Sender *self); 

, а затем в определении self->sim_buf и self->sim_buf_length(_flag) используются соответственно.

+0

Да, ты прав. У меня есть правильные ошибки и код. Все еще не удается исправить ошибку из строк 50 и 51. – awadolko

+1

Являются ли эти ошибки на строках, отмеченных вами в файле (с «здесь у меня возникли проблемы» и т. Д.)? Потому что они вообще не связаны с ошибкой, которую вы утверждаете. Если что-нибудь произойдет, ошибки будут в строке 'self-> sim_buf = sim_buf;' и следующей строке, но я не могу воспроизвести это. – Kevin

+0

Даже с фиксированным источником он не сильно меняется. Теперь сообщение об ошибке с отсутствующим элементом sim_buf_length исчезло, но у вас все еще есть несоответствие типов между 'int *' и 'char *'. –

 Смежные вопросы

  • Нет связанных вопросов^_^