我一直在尝试为我一直在开发的游戏制作服务器。 它的问题在于,如果有人断开连接,那么最后连接的人会因为我可以制作服务器的方式而断开连接。
我曾在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 :(得分:0)
TcpListener.accept
- Method期望参数作为引用,但是你将它作为指针传递(注意,std::unique_ptr::get返回一个指针)。您需要取消引用唯一指针:
listener.accept(*(clients.at(numClients+1)))
此外,您应该使用std::vector::at - 方法来访问成员。