
プログラムの途中で次のエラーが出ました。
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;// ここでエラーが発生
}
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を極端に嫌う人がいます。(ちなみに私はこれでもかって位
使います。)
>>を使わない、というのはそういう意味だったのですね。
1.getline(inputFunction, firstName)が見事成功しました。
firstNameの名前をfullNameに変えてクラスのメンバーに入れましたが
その他はFookyさんの回答をコピーしただけです。
2.と3.はまだ試してません。今度やってみます
(というか、もう動いたのでいいのですが)。
オーバーロードというのが何なのかさえ判らないというのもあるのですが、
あいまいです、ってぶっきらぼうに言われても困りますよね。
だからバグなんでしょうけど。
そういうエラーメッセージの方がよっぽどあいまいだと思うのですが。
とにかく、この問題が発生する度に毎回これを使えばいいのですね。
本当に助かりました。ありがとうございました。
No.1
- 回答日時:
回避方法って、要するに>>を使わなきゃいいんですよ。
この回答への補足
確かに的を得た回答でしたが、Fookyさんのように詳しく書いて戴きたかったです。そもそも「>>を使わなきゃいい」と聞いて「ああ、なるほど」というレベルであれば質問はしていないと思います。仕事としてではなく、自発的に回答して下さっているのですから、1から10まですべて教えて欲しいとは言いませんが、もう少し説明して下さっても罰は当たらないと思います。その分、質問者は回答者に感謝の言葉を返しているのです。今回は残念ですがKOH_daさんに対して感謝の言葉を述べることはできません。しかし、理由は理解していただけると思っています。次回からはよろしくお願いします。
補足日時:2001/06/29 11:49お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LNK2019:未解決の外部シンボル ...
-
スレッドの作成について(pthre...
-
C言語:double型での戻り値は小...
-
Arduinoでの圧電スピーカーとタ...
-
静的でないメンバ関数の呼び出...
-
gcc: incompatible pointer type
-
プログラムを教えてください。...
-
const_castのつかいどころを教...
-
戻り値を返す関数の前に(void)...
-
最早開始時間と最遅完了時刻を...
-
C言語 エラーの原因がわからな...
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
-
プログラムでの数字につく”f”の...
-
「Aに対するBの割合」と「Aに対...
-
C++のfor文について
-
変数とパラメータとは違うもの...
-
C言語のプログラミングですが、
-
main.c:7:43: warning: implici...
-
For文の終了値を関数にしても問...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
【gcc・cygwin】multiple defin...
-
const_castのつかいどころを教...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
pictureboxの画像を削除するには?
-
Notepad++の関数リスト表示の変...
-
C#でテンキーの操作は可能でし...
-
アドレスを指定して関数を呼び...
-
ウインドウの移動禁止
-
画面上をクリックするとクリッ...
-
C# Controls.Addで動的に配置し...
-
別ソースファイル、同クラス名...
-
DLLの関数呼び出しで引数がある...
-
プログラム作成教えてください...
おすすめ情報