2014-09-17 4 views
0

Недавно я начал использовать boost :: thread (также пытался с потоком STL) для создания чата. я сделал на мою «серверной станции» класс, который имеетC++ создание потока внутри класса дает c2064

  1. недействительных функции, которые получают звонки от main.cpp, которые, начиная с прослушиванием сервера + связывания
  2. недействительной функции, которая является потоком, который вызывается из функция я сказал перед тем

Код:

this is ServerSocket.cpp file 

void ServerSocket::startHosting() 
{ 
    Bind(); 
    Listen(); 

    boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener); 
} 

//This is the thread function 

void ServerSocket::clientsListener() 
{ 
    ..... handling incoming clients sockets , code goes here .... 
} 

В создающем потоке части я добавил «это», потому что я читал на StackOverflow, что в NO -статическая функция-член должна иметь «этот» элемент, который представляет класс. Но когда я добавил, что у меня была другая ошибка, но на этот раз 1 значение вместо 0, когда «это» не указано

Ошибка C2064 - термин делает не оценивать до функции, принимающей 1 аргумент

Кто-нибудь знает, как это решить и объяснить мне ответ, пожалуйста? я могу сделать статическую функцию, но это требует от меня, чтобы сделать все другие элементы, которые мне нужно в этой функции как статические, чтобы и я не хочу делать что

+0

'boost :: thread (boost :: bind (& ServerSocket :: clientsListener, this));' (обратите внимание, не проверено, но если история научила меня чему-нибудь ...). Не уверен, что вы планируете делать с этим объектом, когда вы его создаете, а затем сразу же уничтожаете его при закрытии 'startHosting()'. – WhozCraig

+0

Не работает также ... – IdoM

+0

Вы имеете в виду, вы пробовали это: boost :: thread clients_listener = boost :: thread (& ServerSocket :: clientsListener, this); И это не удается? – sajas

ответ

2

В следующей строке:

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener); 

Вы передаете указатель функции-члена, но объект, к которому применяется указатель, отсутствует. Вы, наверное, хотите что-то вроде:

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener, this); 

Кроме того, вам не нужно, чтобы ввести тип дважды на одной и той же линии, как и в Java, так:

boost::thread clients_listener(&ServerSocket::clientsListener, this); 

будет вполне достаточно.

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