私はここで骨の折れる何かをしている可能性が高く、ポインターが必要です (しゃれを許してください)。
次のクラスを定義しました。
ref class CoordinatePair {
public:
int x;
int y;
CoordinatePair();
CoordinatePair(int xInput, int yInput);
CoordinatePair(CoordinatePair ^Other);
//CoordinatePair& operator->();
};
かなり単純です。->
クラスの名前空間内で演算子を使用して、悪影響なしにメンバーを選択できることがわかりました。たとえば、次のようにコンパイルされます。
CoordinatePair::CoordinatePair(CoordinatePair ^Other) {
x = Other->x;
y = Other->y;
}
グルーヴィー。しかし、これをコンパイルしようとすると、問題が発生します。
CoordinatePair^ Coordinates::TranslateCoords(CoordinatePair^ WorldCoords) {
CoordinatePair^ newCoords = gcnew CoordinatePair();
float coordsRatio = 0.0;
//Translate X
coordsRatio = (float) WorldCoords->x / WorldBounds->x;
newCoords->x = (int) (coordsRatio * PixelBounds->x);
//Translate Y
coordsRatio = 0.0;
coordsRatio = (float) WorldCoords->y / WorldBounds->y;
newCoords->y = (int) (coordsRatio * PixelBounds->y);
return newCoords;
}
(上記のコードでWorldBounds
は、 はクラスのメンバーであることに注意してくださいCoordinates
。それ自体がCoordinatePair
、プロジェクトの平面を定義する です。)
具体的には、次のエラーが発生します。
.\Coordinates.cpp(95) : error C2819: type 'CoordinatePair' does not have an overloaded member 'operator ->'
は。まあいいよ。この問題を調査しようとした結果、演算子のオーバーロードを試みることになりました。そのため、クラス宣言に次を追加しました。
CoordinatePair^ operator->();
そして、私はそれを次のように定義しました:
CoordinatePair^ CoordinatePair::operator->() {
return this;
}
それはコンパイラをさらに怒らせました!:-(
.\Coordinates.cpp(17) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(17) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(18) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(18) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(62) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(95) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(95) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(95) : error C2818: application of overloaded 'operator ->' is recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
.\Coordinates.cpp(95) : warning C4280: 'operator ->' was self recursive through type 'CoordinatePair'
y:\documents\wende-project\c3\wende_c3_executioncode\wende_c3_executioncode\c3_display\c3_app\Coordinates.h(7) : see declaration of 'CoordinatePair'
エラーを調べると、次の定義が得られました。
オーバーロードされた 'operator ->' の適用は、型 'type' を介して再帰的です
クラス メンバー アクセス演算子の再定義に、再帰的な return ステートメントが含まれています。-> 演算子を再帰で再定義するには、再帰ルーチンを演算子オーバーライド関数から呼び出される別の関数に移動する必要があります。
ここで何をしているのかはっきりとわからないので、正しい方向に設定する必要があります。ヘルプ?