-1

私は単純なクライアントサーバープログラムを実装しています。私が書いたいくつかの部分は次のとおりです。

  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);

上記の部分は宣言を行っています。

4

1 に答える 1

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;}
 }
于 2012-09-27T00:17:07.003 に答える