アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラムの途中で次のエラーが出ました。

error C2667: '>>' : 2個のオーバーロード関数があいまいで最適な変換ができません。
error C2593: 'operator >>' があいまいです。

調べましたらVisual C++自体のバグらしいのです。

http://support.microsoft.com/support/kb/articles …
http://support.microsoft.com/support/kb/articles …

僕のVisual C++はVersion 5.0です。
学校のはVersion 6.0ですのでこのバグは出ません。

このバグを回避する方法は無いのでしょうか?
Version 5.0を使用されている方は結構いらっしゃるのではないかと
思うのですが、皆さんはどうされているのでしょうか?

一応、関係ありそうなところだけ抜粋しました。

■main.cpp
shareholder total[size];// 全員の名前が入る予定のtotal[]を
// class "shareholder"で定義

total[s].getData(input);// 関数getData()を呼ぶ
// inputはifstreamで定義されている

■shareholder.h
class shareholder
{
public:

shareholder();
virtual ~shareholder();

void getData(ifstream&);

private:

string firstName;
string lastName;
};

■shareholder.cpp
void shareholder::getData(ifstream& inputFunction)
{
inputFunction >> firstName >> lastName;// ここでエラーが発生
}

A 回答 (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を極端に嫌う人がいます。(ちなみに私はこれでもかって位
使います。)
    • good
    • 0
この回答へのお礼

>>を使わない、というのはそういう意味だったのですね。

1.getline(inputFunction, firstName)が見事成功しました。
firstNameの名前をfullNameに変えてクラスのメンバーに入れましたが
その他はFookyさんの回答をコピーしただけです。

2.と3.はまだ試してません。今度やってみます
(というか、もう動いたのでいいのですが)。

オーバーロードというのが何なのかさえ判らないというのもあるのですが、
あいまいです、ってぶっきらぼうに言われても困りますよね。
だからバグなんでしょうけど。
そういうエラーメッセージの方がよっぽどあいまいだと思うのですが。

とにかく、この問題が発生する度に毎回これを使えばいいのですね。
本当に助かりました。ありがとうございました。

お礼日時:2001/06/29 11:45

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

この回答への補足

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

補足日時:2001/06/29 11:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!