プログラムの途中で次のエラーが出ました。
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- その他(プログラミング・Web制作) python fbprophetについて 1 2022/09/29 19:44
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
Notepad++の関数リスト表示の変...
-
C++にてtemplateで受け取った任...
-
ArduinoでMouse関数を使用して...
-
WNDPROC をクラスのメンバにも...
-
const_castのつかいどころを教...
-
【gcc・cygwin】multiple defin...
-
int main()、void main()、void...
-
コンパイルエラー: LNK2001
-
(void)0 はどんな意味ですか
-
解凍ソフト(C++builderで作成...
-
解凍ソフト(C++builderで作成...
-
C/C++でのScene管理について
-
一定時間ごとにプログラムを起...
-
VC++でGetKeyboardStateがうま...
-
C++別のオブジェクトからメンバ...
-
C# Controls.Addで動的に配置し...
-
【VC++6.0】イベントハンドラ関...
-
OpenSSLのSHA1関連の関数はどこ...
-
定義した文字列を wchar_t 系の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
int main()、void main()、void...
-
戻り値を返す関数の前に(void)...
-
既定のコンストラクタがありま...
-
Notepad++の関数リスト表示の変...
-
ArduinoでMouse関数を使用して...
-
多重定義が起きている?--lnk20...
-
C++にてtemplateで受け取った任...
-
静的でないメンバ関数の呼び出...
-
C# Controls.Addで動的に配置し...
-
const_castのつかいどころを教...
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
gcc: incompatible pointer type
-
C#でラジオボタンを設定に記録...
-
VC++でGetKeyboardStateがうま...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
void*型の配列について
-
GDI+の使用方法について
-
DirectInput でのエラー
おすすめ情報