2016-04-13 18 views
0

ここでは私が取り組んでいるプログラムのスニペットですが、基本的にはタイトルに記述されているのと同じエラーメッセージが2回表示されます。 。誰かが私が間違ってやっているものを私に伝えることができる場合、私はそれを感謝したいので、私の初めてのpthreadで取り組んでいるpthread in c unexpected unexpected speifiers or '...' before '('

#include <pthread.h> 
#include <stdio.h> 

void *User_choices(); 
void *Switch_statement(void *); 
void *Server_function(void *); 

pthread_t SEND_TO_SERVER_THREAD; 
pthread_t PIC_COMMUNICATION_THREAD; 
pthread_t USER_INTERFACE_THREAD; 

char buf[1024]; 

void main() 
{ // 1 
    snprintf(buf, 1024, "string"); 
    while(1) 
     { // 2 
     pthread_create(&USER_INTERFACE_THREAD, NULL, User_choices, NULL); 
     } // 3 
} // 4 

void *User_choices() 
{ // 5 
    int userinput; 
    printf("Type 0 to reset sensor, 1 to ping, 2 to receive ADC value, 3 to quit the program: "); 
    scanf("%i", &userinput); 
    pthread_create(&PIC_COMMUNICATION_THREAD, NULL, Switch_statement, &userinput); 
} // 6 

void *Switch_statement((void *)userchoice)) 
{ // 7 
    int user = (int)*userchoice; 
    switch(user) 
    { // 8 
     case 1:   
       printf("OTHER FUNCTIONS USUALLY GO HERE \n"); 
       break; 
     case 2:          //RETRIEVE ADC CASE 

       pthread_create(&SEND_TO_SERVER_THREAD, NULL, Server_function, (void *)&buffer); 
       break; 
     case 3: 
       exit(0);  
     case 0:          //RESET CASE 
       printf("ONCE AGAIN, OTHER FUNCTIONS USUALLY GO HERE"); 
       break;       //EXIT THE PROGRAM 
     default: 
       printf("Your entry is not a valid option! Try again \n");        
    } // 9 
} // 10 

void *Server_function((void *)server_buffer)) 
{ // 11 
    const char* send_to_server = (char)*server_buffer; 
    HTTP_GET(send_to_server); 
} // 12 

をここでエラーコードは以下のとおりです。

justpthread.c:31:24: error: expected declaration specifiers or ‘...’ before ‘(’ token 
void *Switch_statement((void *)userchoice)) 
         ^
justpthread.c:53:23: error: expected declaration specifiers or ‘...’ before ‘(’ token 
void *Server_function((void *)server_buffer)) 

私はちょうど空に変更した場合mainからintへのmain、私は同じ2つのエラーコードを取得します。

justpthread.c: In function ‘Switch_statement’: 
justpthread.c:33:18: warning: dereferencing ‘void *’ pointer [enabled by default] 
    int user = (int)*userchoice; 
       ^
justpthread.c:33:2: error: invalid use of void expression 
    int user = (int)*userchoice; 
^
justpthread.c:41:76: error: ‘buffer’ undeclared (first use in this function) 
    pthread_create(&SEND_TO_SERVER_THREAD, NULL, Server_function, (void *)&buffer); 
                      ^
justpthread.c:41:76: note: each undeclared identifier is reported only once for each function it appears in 
justpthread.c:44:5: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default] 
    exit(0); 
    ^
justpthread.c: In function ‘Server_function’: 
justpthread.c:55:37: warning: dereferencing ‘void *’ pointer [enabled by default] 
    const char* send_to_server = (char)*server_buffer; 
            ^
justpthread.c:55:2: error: invalid use of void expression 
    const char* send_to_server = (char)*server_buffer; 
^

そして君たちは限り括弧が行くように私には信じられないほど混乱していたので、私はそれらのすべてを、番号:メインのOID、私は次のように取得します。私は偶数を見ていて、彼らは正しい方向を変えるように見える。推奨されているように私は

int user = *((int*)userchoice); 

に... int型のユーザーを変更し、私は次のエラーメッセージを得た

void main() 
{ 
    snprintf(buf, 1024, "string"); 
    while(1) 
     { 
     pthread_create(&USER_INTERFACE_THREAD, NULL, User_choices, NULL); 
     } 
} 

void *User_choices() 
{ 
    int userinput; 
    printf("Type 0 to reset sensor, 1 to ping, 2 to receive ADC value, 3 to quit the program: "); 
    scanf("%i", &userinput); 
    pthread_create(&PIC_COMMUNICATION_THREAD, NULL, Switch_statement, &userinput); 
} 

void *Switch_statement(void *userchoice) 
{ 
    int user = *((int*)userchoice); 
    switch(user) 
    { 
     case 1:   
       printf("OTHER FUNCTIONS USUALLY GO HERE \n"); 
       break; 
     case 2:          //RETRIEVE ADC CASE 

       pthread_create(&SEND_TO_SERVER_THREAD, NULL, Server_function, (void *)&buf);  
       break; 
     case 0:          //RESET CASE 
       printf("ONCE AGAIN, OTHER FUNCTIONS USUALLY GO HERE"); 
       break;       //EXIT THE PROGRAM 
     default: 
       printf("Your entry is not a valid option! Try again \n");        
    } 
} 

は、追加の推奨事項のオフに行く、私はそうのように私のコードを変更しました:

justpthread.c: In function ‘Server_function’: 
justpthread.c:53:37: warning: dereferencing ‘void *’ pointer [enabled by default] 
    const char* send_to_server = (char)*server_buffer; 
            ^
justpthread.c:53:2: error: invalid use of void expression 
    const char* send_to_server = (char)*server_buffer; 

これは、以前のエラーのいくつかを取り除いたようです。上*

justpthread.c: In function ‘Server_function’: 
justpthread.c:53:31: warning: initialization makes pointer from integer without a cast [enabled by default] 
    const char* send_to_server = *((char*)server_buffer); 
+0

あなたのブラケットをカウントし、関数呼び出しの引数を指定する方法を学びます。 –

+0

'void main()'は不正です。代わりに 'int main()'を使用してください。 – cwschmidt

答えて

1

、あなたはchar*void*をキャストしたいが、あなたはserver_bufferへのポインタを逆参照し、void*charにしていないchar*にキャストされている*((char*)server_bufferと。

適切な方法は次のとおりです。

const char* send_to_server = (char*)server_buffer; 
+0

すべての問題を取り除いたので、皆さんに問題を指摘してくれてありがとうございました。 –

0

がvoidの周りに(かっこ)を削除します。

void *Server_function(void *server_buffer) 
{ 
    const char* send_to_server = *((char*)server_buffer); 
    //HTTP_GET(send_to_server); 
} 

そして今、私はちょうど1個のエラーがあります。だから私は今、そのserver_bufferが問題を抱えているだけでなくので、私はそれを変更しようとしました気づきましたそれらの行。

+1

括弧はアンバランスでもあることに注意してください:( –

+0

@cwshmidt、Martin、私は推奨変更を試みて違う、あるいは少なくとも同じエラーを出しました。そして、ブラケットに番号を付けました。 –

0

は、あなたがそれを唱える前に、あなたはvoid *と何もできないvoid *userchoice

int user = *((int*)userchoice); 

を試してみてください。最後の警告のために

+0

私はあなたが言ったことをして、それはいくつかの問題を打ち砕かなかった。同様の問題を抱えた他の変数で同じことをしようとしたが、まだ1つのエラーがある。私はこの分野であまり知識がありません。 –

関連する問題