2017-09-28 4 views
0

私が開発しているゲーム用のサーバーを作りようとしています。 問題は、誰かが切断すると、サーバーを作成できる方法のために、最後に接続した人が切断されるということでした。listener.acceptは、unique_ptrをsf :: 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) 

は、私の知る限り、これは動作するはずですが、私は何とかのF * CKに管理することアップと、このエラーが発生します。ここでは

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++の経験が1年しかないので、私のような人が理解できる回答を書いてください:)

答えて

0

TcpListener.accept -Methodは引数を参考にしていますが、それを渡していますポインタとして(std::unique_ptr::getがポインタを返すことに注意してください)。あなたはユニークなポインタを間接参照する必要があります。

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

また、あなたがメンバーにアクセスするstd::vector::at -methodを使用する必要があります。

関連する問題