演算子のオーバーロードについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
レフェリア

演算子のオーバーロードについて

#1

投稿記事 by レフェリア » 11年前

自分で作ったクラス専用の入力・出力演算子の動きを定義したいのでプログラミングしたのですが、
error C2678: 二項演算子 '>>' : 型 'std::istream' の左オペランドを扱う演算子が見つかりません (または変換できません)
と出てしまい実行できません・・・
どうすればいいか分からず手詰まりの状態ですので、だれかどうすればいいか教えてくださいm(_ _)m

一応その部分のプログラムを乗せます

コード:

class bu
{
        int yousoa;
        int yousob;
public:
	//出力用のメンバ関数 (出力演算子のオーバーロード)
	friend ostream& operator<<( ostream& s, bu& a );

	//入力用のメンバ関数 (入力演算子のオーバーロード)
	friend istream& operator>>( istream& i, bu& a );
};


ostream& operator<< ( ostream& s, bu& a)
{

	s << a.yousoa << "///" << a.yousob << "\n";

	return s;
}

istream& operator>> ( istream& i, bu& d )
{

	i >> d.yousoa >> d.yousob;

	return i;
}

void main()
{
	//初期化
	bun fist();

	cout << "入力してください";
	cin >> fist;
	

	//入力した数を表示
	cout << "出力します:";
	cout << fist;
}


YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: 演算子のオーバーロードについて

#2

投稿記事 by YuO » 11年前

ちょっと前に原因に関することが話題に挙がっていました。
http://dixq.net/forum/viewtopic.php?f=3&t=12155

[quote="レフェリア"]

コード:

	bun fist();
これは,引数をとらずにbun型のインスタンスを返す関数fistの宣言です。
bun型のインスタンスfistを定義するには,

コード:

bun fist;
と,括弧をつけずに定義して下さい。
# デフォルトコンストラクタのみの制限。

レフェリア

Re: 演算子のオーバーロードについて

#3

投稿記事 by レフェリア » 11年前

YuOさんありがとうございますm(_ _)m
デフォルトコンストラクタにそんな制限があったとは知りませんでした・・・(´・ω・`)

閉鎖

“C言語何でも質問掲示板” へ戻る