2017-09-28 52 views
0

我一直在试图为我开发的游戏制作服务器。 它的问题是,如果有人断开连接,最后连接的人将断开连接,因为我可以制作服务器。listener.accept在向sf传递unique_ptr时给出错误:: TcpSocket

我已经问过如何解决这个问题在sfml论坛上,并收到回复说,而不是使用std::vector<sf::TcpSocket> clients使用std::vector<std::unique_ptr<sf::TcpSocket>> clients

改变这一切的一切,以满足这种变化之后,我遇到了这个代码的问题:

while (listener.accept(clients[numClients + 1].get()) == sf::Socket::Done) 

据我所知,这应该工作,但我总算他妈的它并获得这个错误:

initial value of reference to non-const must be an ivalue 

这里是只是问题的一个代码片段:

#include <iostream> 
#include <vector> 
#include <memory> 
#include <SFML\Network.hpp> 

int main() 
{ 
    const int maxClients = 100; 
    int numClients = 0; 
    std::vector<std::unique_ptr<sf::TcpSocket>> clients(maxClients); 

    sf::TcpListener listener; 

    while (listener.accept(clients[numClients + 1].get()) == sf::Socket::Done) 
    { 
     numClients++; 
     std::cout << "new guy connected" << std::endl; 
    } 

    return 0; 
} 

我对sfml和C++很陌生(只有大约一年的经验),所以请写出像我这样的人可以理解的回复:)

回答

0

TcpListener.accept -Method期望参数作为参考,但您传递它作为指针(注意,std::unique_ptr::get返回一个指针)。您需要取消引用的唯一指针:

listener.accept(*(clients.at(numClients+1)))

而且你应该使用std::vector::at - 方法来访问成员。

相关问题