2012-09-27 51 views
-1

我正在實施一個簡單的客戶端服務器程序。我寫的一些部分是:如何聲明ip地址使用多個功能?

int main(void){ 
    using namespace boost::asio; 
    using namespace std; 
    const std::string ip = "localhost"; 
    const int port  = 10500; 
    ip::address addr = ip::address::from_string(ip); 
    ip::tcp::endpoint ep(addr, port); 
    ip::tcp::iostream s(ep); 

    s << "TERMINATE\n" << std::flush;} //This sends Terminate command to the server. 
    } 
    void function(void){ 
     s << "TERMINATE\n" << std::flush;} // This part doesn't work. 

     } 

我是新的推動asio和網絡編程。並在Windows MingGW上工作。

在上面的代碼中,我聲明瞭主函數中的IP地址,但是當我嘗試在主外部聲明的其他函數中使用它時,它不起作用。出現如下錯誤: 's'未在此範圍內聲明。 如果它是一個正常的變量,我會在主體之外聲明它,並且所有其他函數都可以共享。但是這不適用於此。在哪裏以及如何聲明IP地址和端口。我假設

using namespace boost::asio; 
using namespace std; 
const std::string ip = "localhost"; 
const int port = 10500; 
ip::address addr = ip::address::from_string(ip); 
ip::tcp::endpoint ep(addr, port); 
ip::tcp::iostream s(ep); 

上面部分是做聲明。

回答

0

您可以將其設爲全局變量。類似的,

using namespace boost::asio; 
using namespace std; 

ip::tcp::iostream s; 

int main(void){ 
    const std::string ip = "localhost"; 
    const int port  = 10500; 
    ip::address addr = ip::address::from_string(ip); 
    ip::tcp::endpoint ep(addr, port); 
    s = iostream(ep); 

    s << "TERMINATE\n" << std::flush;} //This sends Terminate command to the server. 
} 
void function(void){ 
    s << "TERMINATE\n" << std::flush;} 
} 

更好的解決方案是將它作爲參數傳遞給你的函數。全局變量通常是一個不好的事情使用。

using namespace boost::asio; 
using namespace std; 

int main(void){ 
    const std::string ip = "localhost"; 
    const int port  = 10500; 
    ip::address addr = ip::address::from_string(ip); 
    ip::tcp::endpoint ep(addr, port); 
    ip::tcp::iostream s(ep); 

    function(s); 
} 
void function(ip::tcp::iostream &s){ 
    s << "TERMINATE\n" << std::flush;} 
} 
+0

問題解決了感謝偉大的建議。 – user1639961