2017-09-28 55 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 - 方法來訪問成員。

相關問題