20年以上前の古いCPPコードをビルドしていますが、g ++でビルドエラーが発生します。誰かが私に何が変わったのか説明できますか?ありがとう。(ターボCでは大丈夫でした)
エラー:
t_overload.cpp:8:40: error: no matching constructor for initialization of 'Point'
Point operator+(Point& v) { return Point(x+v.x, y+v.y); }
^~~~~~~~~~~~~~~~~~~
cppファイル:
#include <stdio.h>
struct Point {
int x, y;
// Point(Point& v) {set(v.x, v.y);} // build okay without this line; error if uncomment
Point(int a, int b) {set(a,b);}
void set(int a, int b) {x=a, y=b;}
Point operator+(Point& v) { return Point(x+v.x, y+v.y); }
};
int main() {
Point a(1,2);
Point b(a);
Point c = a + b;
printf("%d %d\n", c.x, c.y);
}
Point(Point& v)
コピーコンストラクターはconst
antパラメーターを取る必要があります。これは次のようになります。
Point(const Point& v)
しかし、そのコピーコンストラクターが行うことを考えると、それは完全に不要です。あなたはそれを完全に取り除くことができます。
Point operator+(Point& v)
同様に、オーバーロードのパラメータは一定である必要があります。
Point operator+(const Point& v)
「演算子のオーバーロードの基本的なルールとイディオムは何ですか?」を参照してください。
これらの問題は両方とも、オーバーロードの微妙で繊細なルールと、一時的なものが関数パラメーターにバインドする方法とともに、コンパイルエラーを引き起こしていました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加