• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++でオーバーロードに関するバグの回避)

C++でのオーバーロードのバグ回避方法を知りたい

このQ&Aのポイント
  • C++でプログラムの途中で発生するオーバーロード関数のエラーについて調査しました。
  • Visual C++のバージョン5.0で発生するバグであることが判明しましたが、回避方法は分かりません。
  • 関係する部分のコードを抜粋しましたが、どのように対処すべきかわかりません。他のC++開発者はどのように対応しているのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.2

> 回避方法って、要するに>>を使わなきゃいいんですよ。 その通り。 …で終るのも殺生なんで、代替案を。 1.getline(inputFunction, firstName)   でfirstNameに一行読み込み、   lastName = firstName.substr(firstName.rfind(' ') + 1)   firstName = firstName.substr(0, firstName.find(' '))   とかやって分ける。     でもなぁ。これもおなじバグが影響しそう。   特に、Q240/8/69.ASP のバグがほんとに影響してるなら、   多分、出ますね。   std/bastring.hの中で、operator>>(ifstream, string)と同じ   ように、バリバリtemplateを使って宣言されてるんで。 2.char str[MAX_BYTES_PER_LINE+1];   inputFunction.getline(str, MAX_BYTES_PER_LINE);   でstrに一行読み込み、   char fn[MAX_BYTES_PER_LINE+1], ln[MAX_BYTES_PER_LINE+1];   sscanf(str, "%s %s", fn, ln);   で分ける。分け方は、strで初期化したstringオブジェクトをつくって、   1.と同様の方法で分けても良いです。Cの関数を使いたくないなら。 3.最初からストリームをCの標準入出力関数fopen(...)で開いて、   fscanfで読み込む。   *scanf(...)は、ifstream::operator>>(...)と同じくスペースを区切り記号   とみなすので、getline(...)のように分ける手間は省けます。 他にも色々あると思います。とにかく、やばいのは使わないことです。 私の周りにも、VC++経験者で(ちなみに私はGNU C++です) templateを極端に嫌う人がいます。(ちなみに私はこれでもかって位 使います。)

sucker
質問者

お礼

>>を使わない、というのはそういう意味だったのですね。 1.getline(inputFunction, firstName)が見事成功しました。 firstNameの名前をfullNameに変えてクラスのメンバーに入れましたが その他はFookyさんの回答をコピーしただけです。 2.と3.はまだ試してません。今度やってみます (というか、もう動いたのでいいのですが)。 オーバーロードというのが何なのかさえ判らないというのもあるのですが、 あいまいです、ってぶっきらぼうに言われても困りますよね。 だからバグなんでしょうけど。 そういうエラーメッセージの方がよっぽどあいまいだと思うのですが。 とにかく、この問題が発生する度に毎回これを使えばいいのですね。 本当に助かりました。ありがとうございました。

その他の回答 (1)

  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.1

回避方法って、要するに>>を使わなきゃいいんですよ。

sucker
質問者

補足

確かに的を得た回答でしたが、Fookyさんのように詳しく書いて戴きたかったです。そもそも「>>を使わなきゃいい」と聞いて「ああ、なるほど」というレベルであれば質問はしていないと思います。仕事としてではなく、自発的に回答して下さっているのですから、1から10まですべて教えて欲しいとは言いませんが、もう少し説明して下さっても罰は当たらないと思います。その分、質問者は回答者に感謝の言葉を返しているのです。今回は残念ですがKOH_daさんに対して感謝の言葉を述べることはできません。しかし、理由は理解していただけると思っています。次回からはよろしくお願いします。

関連するQ&A