私はこの列挙型を持っており、その列挙型のオブジェクトを1つだけ増やしたいだけです。列挙型の演算子のオーバーロード
enum Month {
january = 1,
february,
march,
april,
may,
june,
july,
august,
september,
october,
november,
december
};
私の列挙体の月mのオブジェクトでは、オブジェクトの変数を1つの位置だけ移動したいだけです。それは、引数としてint型を取る必要があることをパラメータとして月&メートルで
Month operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
私はエラーを取得します。だからもし私が "(Month & m、int)"と言うと、 "それは0か1つの引数を取らなければならない"と言われています。演算子のオーバーロードがメンバ関数である場合は、Month & mを必要としないと読んだので、削除しました。その後、私はさらに別のエラーが発生します。「演算子++(オペランドの型は 'Month')」と一致しません。私が紛失しているものはありますか?
メインコード:コメントで
class Date {
int y, d, month_end; // private
Month m;
public:
Date(int yy, Month mm, int dd)
: y(yy), d(dd), m(mm) {
}
Month& operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
void add_month() {
++m;
}
どのコンパイラを使用していますか? MS vs14でうまく動作します。 'Main()'を表示してください。 – lakeweb
@lakeweb gcc version 6.4.0 20170704(Debian 6.4.0-1)私は実際にオペレータのオーバーロードを使ってmainで何も呼び出さなかったが、元の質問に追加する。 –
@ sS5H lakewebのコメントの意味は、あなたが[最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)を作成するためのものだと思います。 – jodag