我已經寫了一個遊戲來移動棋盤周圍的棋手使用信號量鎖定棋盤,然後再允許其他玩家進入。我該如何解決「void表達式的無效使用」? C++
爲了簡潔起見,我將跳過大部分代碼,但這裏是我弄糟的事情。
首先是運行線程的「玩家」
void* xTurn(){
int move; //generate random number to place items on board
move = rand()%4+1;
//generates a number between 1 and 4
while(tokens!=0){ //while there are still "tokens" on the board, continue
sem_wait(&sB);
for(int i = 0; i < ROW; i++){
for(int j = 0; j < COL; j++){
if(board[i][j] == 'X'){
switch(move){
case '1':
if(i++>8){
xTurn();
}
else{
if(board[i++][j]=='a'){
xScore++;
tokens--;
}
if(board[i++][j]=='A'){
xScore+2;
tokens--;
}
board[i][j]='-';
board[i++][j]='X';
break;
}
case '2':
if(i--<0){
xTurn();
}
else{
if(board[i--][j]=='a'){
xScore++;
tokens--;
}
if(board[i--][j]=='A'){
xScore+2;
tokens--;
}
board[i][j]='-';
board[i--][j]='X';
break;
}
case '3':
if(j++>8){
xTurn();
}
else{
if(board[i][j++]=='a'){
xScore++;
tokens--;
}
if(board[i][j++]=='A'){
xScore+2;
tokens--;
}
board[i][j]='-';
board[i][j++]='X';
break;
}
case '4':
if(j--<0){
xTurn();
}
else{
if(board[i][j--]=='a'){
xScore++;
tokens--;
}
if(board[i][j--]=='A'){
xScore+2;
tokens--;
}
board[i][j]='-';
board[i][j--]='X';
break;
}
}
}
}
}
}
sem_post(&sB);
}
而且我在這裏稱之爲一個函數。假設我有方法yTurn和zTurn;打印以類似的方式進行。
void playgame(){
createBoard();
srand (time(NULL));
sem_init(&sB,0,0);
pthread_create(&tX,NULL,&xTurn,NULL);
pthread_create(&tY,NULL,&yTurn,NULL);
pthread_create(&tZ,NULL,&zTurn,NULL);
pthread_create(&tP,NULL,&print,NULL);
pthread_join(tX,NULL);
pthread_join(tY,NULL);
pthread_join(tZ,NULL);
pthread_join(tP,NULL);
if(xScore>yScore&&zScore){
cout<<"Player X Wins with a score of "<<xScore;
}
if(yScore>xScore&&zScore){
cout<<"Player Y Wins with a score of "<<yScore;
}
if(zScore>yScore&&xScore){
cout<<"Player Z Wins with a score of "<<zScore;
}
sleep(20);
menu();
}
當我運行它,我得到兩個不同的錯誤:
一個,告訴我睡不申報,但運行Linux時,它會得到解決。 (*)(void * _'[-fpermissive] 這個問題發生在pthread_create的第三個參數中。 我還沒有 - 從void *()()'無效轉換到'void 。一個線索,這是什麼意思我已經嘗試了一些不同的東西,但沒有絲毫的想法,如何解決這一問題
沒有這裏涉及到的信號量。可能要刪除該標籤,並可能添加pthread。 – Joel 2013-05-01 23:52:32