好了,所以我有,是为了增加玩家的一个载体,但每当我打电话的push_back功能我得到一个内存访问违规线程,我已经采取了所有其它的代码,其中的矢量正在这个线程之外使用。不能的push_back插入参考矢量
我可以读取向量的大小出现这种情况之前,但我就是不能的push_back进去。
的载体是这样的:
std::vector<A_Player> &clientsRef;
ADN线程,这是在是:
void NetworkManager::TCPAcceptClient(){
std::cout << "Waiting to accept that client that pinged us" << std::endl;
fd_set fd;
timeval tv;
FD_ZERO(&fd);
FD_SET(TCPListenSocket, &fd);
tv.tv_sec = 5;//seconds
tv.tv_usec = 0;//miliseconds
A_Player thePlayer;
thePlayer.sock = SOCKET_ERROR;
if (select(0, &fd, NULL, NULL, &tv) > 0){ //using select to allow a timeout if the client fails to connect
if (thePlayer.sock == SOCKET_ERROR){
thePlayer.sock = accept(TCPListenSocket, NULL, NULL);
}
thePlayer.playerNumber = clientsRef.size() + 1;
thePlayer.isJumping = false;
thePlayer.X = 0;
thePlayer.Y = 0;
thePlayer.Z = 0;
clientsRef.push_back(thePlayer);
clientHandler = std::thread(&NetworkManager::ClientRecieve, this);
clientHandler.detach();
}
else{
std::cout << "Client connection timed out!!!!!" << std::endl;
}
}
谁能给我一些见解,为什么这不工作?
亲切的问候
这是如何引用初始化(标准::矢量&clientsRef是一个参考,必须初始化)? –
通过构造函数 –
不,引用没有构造函数。看看'&'标志。这使得clientsRef一个基准和一个编译器应该抱怨像'的std ::矢量&clientsRef一条线;',因为clientsRef未初始化。 –