「オブジェクトのメンバ関数に互換性のない型修飾子があります」というエラー解決
Visual Studioでこんなエラーが出た。
オブジェクトにメンバ関数と互換性のない型修飾子があります
これの解決方法は、
例えば、こんなソースがあったとする。
//Coordinate.h #if !defined(___COORDINATE) #define ___COORDINATE class Coordinate { double mX; double mY; public: Coordinate(void); ~Coordinate(void); Coordinate(double const argX, double const argY) :mX(argX), mY(argY){} Coordinate(const Coordinate& argCoordinate); void operator()(double const argX, double const argY) { mX = argX; mY = argY; } double GetX() { return mX; } double GetY(){ return mY; } }; #endif
//Coordinate.cpp #include "Coordinate.h" Coordinate::Coordinate(void) :mX(0), mY(0){} Coordinate::~Coordinate(void){} Coordinate::Coordinate(const Coordinate& argCoordinate) { mX = argCoordinate.GetX(); mY = argCoordinate.GetY(); }
Coordinate.cppの方で引数のargCoordinateのGetメソッドを使いたいけれど、
↓のargCoordinateに「オブジェクトのメンバ関数に互換性のない型修飾子があります」というエラーが出る。
Coordinate::Coordinate(const Coordinate& argCoordinate)
{
mX = argCoordinate.GetX();
mY = argCoordinate.GetY();
}
なにが必要かというとGetX(), GetY()に const がないといけない。これがないとエラーが出る。constは
double GetX() const { return mX; } double GetY() const { return mY; }
こんな風に")" と "{" の間 const に書く。そうするとエラーを解消することができた。
これで解決しなかったらその時は...どうしましょうね。