以下の機能が原因のようです」
template <class Type>
void * server_work(void * arg)
{
int ii;
int cno;
Server<Type> * server = (Server<Type> *) arg;
Customer<Type> newcust;
for(ii=0; ii<QUEUE_LENGTH; ii++)
{
size_t length = rand()%(MAX_RANGE-MIN_RANGE)+MIN_RANGE ; // Generate the number, assign to variable.
pthread_mutex_lock(&MUTEX);
cno=CUSTOMER_COUNT;
CUSTOMER_COUNT++;
pthread_mutex_unlock(&MUTEX);
newcust=Customer<Type>(cno, cno,cno,length);
if(CUSTOMER_COUNT<=QUEUE_LENGTH)
{
server->IncreaseNumOfCustomers();
for(size_t i = 0; i < length; ++i)
{
newcust.getLinkedList().insertFirst(1000);
}
server->getCustomers()[ii]=newcust;
}
else
{
break;
}
}
return NULL;
}
この問題は、コンパイラが次のコードを読み取るときに発生します。
int main(int argc, char** argv)
{
pthread_t threads[NUMBER_OF_SERVERS];
int i,j;
if(pthread_mutex_init(&MUTEX, NULL))
{
cout<<"Unable to initialize a MUTEX"<<endl;
return -1;
}
Server<int> servs[NUMBER_OF_SERVERS];
for(i = 0; i < NUMBER_OF_SERVERS; i++)
{
servs[i].setServerNum(i);
pthread_create(threads+i, NULL, server_work, (void *)&servs[i]);//<<--compiler flags here
}
// Synchronization point
for(i = 0; i < NUMBER_OF_SERVERS; i++)
{
pthread_join(*(threads+i), NULL);
}
cout<<"SERVER-NO\tCUSTOMER-NO\tARRIVAL-TIME\tWAITING-TIME\tTRANSACTION-TIME"<<endl;
for(i = 0; i < NUMBER_OF_SERVERS; i++)
{
for(j=0; j<servs[i].getCustomersServed(); j++)
{
cout<<i<<"\t\t"<<servs[i].getCustomers()[j].getCustomerNumber()<<"\t\t"<<servs[i].getCustomers()[j].getArrivalTime()<<"\t\t"<<servs[i].getCustomers()[j].getWaitingTime()<<"\t\t"<<servs[i].getCustomers()[j].getTransactionTime()<<endl;
}
}
cout<<endl;
cout<<endl;
コンパイラから次のエラーが表示されます。
main.cpp:84:71: エラー: 関数 'server_work' を型 'void* ( )(void )' に変換する一致がありません main.cpp:26:8: エラー: 候補は: テンプレート void* server_work(void*)