1. ホーム
  2. c++

[解決済み] C++ "No matching constructor for initialization of" コンパイラーエラー

2022-02-24 06:50:56

質問

あるクラスを初期化しようとすると、エラー "No matching constructor for initialization of 'TextureCoordinates'" が表示されます。

初期化しようとしているクラス。

class TextureCoordinates
{
public:
    TextureCoordinates(){};
    TextureCoordinates(Point2D& origin, Dimensions2D& dim);
    Point2D getOrigin() const {return origin;};
    Dimensions2D getDim() const {return dim;};
private:
    Point2D origin;
    Dimensions2D dim;
};

コンパイラーエラーが発生した行。

TextureCoordinates result(point, Dimensions2D(width, height));

コンストラクタの定義。

TextureCoordinates::TextureCoordinates(Point2D& origin, Dimensions2D& dim):
origin(origin), dim(dim) {}

何が間違っているのか、何か思い当たることはありますか?

解決方法は?

コンストラクタは非恒等式参照で引数を取りますが、一時的なオブジェクト ( Dimensions2D(width, height) を使用します。一時的なものは、たとえ非恒久的なものであっても、非恒久的な参照に束縛されることはない。

解決策としては、コンストラクタが const 参照を受け取るようにします(いずれにせよ、渡されたオブジェクトを変更するべきではありません)。

TextureCoordinates(Point2D const& origin, Dimensions2D const& dim);