C ++は優れた、重量級のプログラミング言語ですが、読み取り可能なエラーメッセージを発行する方法を誰も理解していません。コンパイラの観点から見ると、エラーは複雑であるため、あなたが言及するエラーメッセージは複雑であると思います。時間をかけてメッセージを注意深く読み、しばらく考えてみると、なぜそうなのか理解し始めるかもしれません。
エラーメッセージを分解してみましょう。
server.cpp:78:51: note: candidates are:
これは、エラーがserver.cppの78行目(または51行目ですか?)で発生しているように見えることを意味します。 ただし、コンパイラがエラーであると判断する理由は、Boostヘッダーasio/buffer.hppにあります。 ヘッダーはおそらく複雑で正しいので、そのヘッダーを調べることはおそらく無益です。それでも、エラーメッセージの次の行は、Boostヘッダーから必要な情報を抽出します。
note: boost::asio::mutable_buffers_1 boost::asio::buffer(const boost::asio::mutable_buffer&)
では、 server.cppの78行目に戻って、電話をかけましboost::asio::buffer()
たね。括弧の間の引数として、その関数はタイプのオブジェクトを必要としますboost::asio::mutable_buffer
。あげましたか?はいの場合、よろしいですか?明らかに、何らかの理由で、コンパイラは引数が正しい型であると認識しません。
次に、エラーの3行目を見てみましょう。
note: candidate expects 1 argument, 2 provided
したがって、実際には、server.cppの78行目に戻って、に1つではなく2つの引数を指定しましたboost::asio::buffer()
。つまり、 -boost::asio::buffer(x, y)
ではなく呼び出しboost::asio::buffer(x)
た、または呼び出していない場合は、コンパイラは呼び出したと見なします。
これらの手順をトレースします。彼らはあなたの問題を解決するはずです。
参考までに、画面の半分以上を占めるC++エラーメッセージが表示されることがよくあります。私はあなたよりもそれらが好きではありませんが、コンパイラがそれらを発行する理由は理解しています。特にC++の強力なテンプレート機能は、ライブラリ機能が誤用されたときにかなり大きなエラーメッセージを表示します。それは言語の性質です。C ++でプログラミングする場合、ほとんど何もできませんが、この性質に自分自身を調和させることができます。