2015-08-15 4 views
0

Привет, я пытаюсь создать поток, вызывающий функцию, которая берет структуру. Проблема утра облицовочный это НКУ говорит мне несовместимую указательсоздать thread несовместимый тип

Это ошибка

warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default] 
/usr/include/pthread.h:225:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘void * (*)(struct sonicPins *) 

»

Строка кода, относящиеся к этой ошибке pthread_create(&thr1, NULL, &threadFunc,(void*) &args1);

Вот функция его пытается вызвать

void* threadFunc(struct sonicPins *args) 

структура определяется в sonicThread.h и основные моменты, на структуры

Над основной функцией у меня есть

struct sonicPins *args1; 

И у меня есть

args1 = malloc(sizeof(struct sonicPins)); 

args1->trig1 = 21; 
args1->echo1 = 20; 
//front right. 
args1->trig2 = 16; 
args1->echo2 = 12; 
//rear left; 
args1->trig3 = 26; 
args1->echo3 = 19; 
//rear right. 
args1->trig4 = 13; 
args1->echo4 = 6; 

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

+0

Я откат правки, как это сделало ответ ниже бессмысленным. Пожалуйста, не изменяйте код после получения ответов. Или опубликуйте новый вопрос или добавьте обновленный код, не удаляя старый код. –

ответ

3

Сообщение об ошибке GCC прост: метод pthread_create ожидает метод, который принимает аргумент void*.

Изменить вашу функцию к этому:

void* threadFunc(void* sonicPinsPtr) { 
    struct sonicPins* args = sonicPinsPtr; 

    // rest of your code here 
} 
+0

У меня действительно было такое, но я обнаружил, что не смог получить доступ к структуре. Внутри вызываемой функции у меня есть echo = args-> echo1; Thiis возвращает следующую ошибку: sonicThread.c: В функции 'threadFunc': sonicThread.c: 11: 8: error: 'echo' uneclared (первое использование в этой функции) sonicThread.c: 11: 8: note: each uneclared identifier сообщается только один раз для каждой функции, которая появляется в sonicThread.c: 11: 19: warning: dereferencing 'void *' pointer [включен по умолчанию] sonicThread.c: 11: 19: error: запрос для члена 'echo1 'в чем-то не структуре или объединении –

+0

@JamesSmith, тогда вы должны показать больше кода, потому что это * правильный * ответ на ваш первоначальный вопрос - второй раз взгляните на код в этом ответе, конечно, вам нужен указатель на ваш 'struct' type first ... –

+0

@JamesSmith: Затем внутри функции потока выполните:' struct sonicPins * p = sonicPinsPtr; 'и используйте' p' для доступа к членам 'struct sonicPins', как это 'Р-> echo1'. – alk