2011-11-12 19 views
16

初期化しようとしましたがエラーが発生しました "'TextureCoordinates'の初期化に一致するコンストラクタがありません。C++ "コンパイラエラーの初期化に一致するコンストラクタがありません"

私は初期化しようとしているクラス:コンパイルエラーと

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) {} 

私がやっているすべてのアイデア違う?

+0

コンストラクタの定義はどこですか?私が見るのは宣言だけです。 – Pubby

+0

私はちょうどそれを追加しました。 – Xavier

答えて

16

あなたのコンストラクタは非const参照によって引数をとりますが、一時オブジェクト(Dimensions2D(width, height))を渡します。一時的ではないものも、非const参照にバインドしません。 2番目のパラメータは、コンストラクタが期待左辺値参照にバインドすることはできません右辺値である

TextureCoordinates(Point2D const& origin, Dimensions2D const& dim); 
4
TextureCoordinates result(point, Dimensions2D(width, height)) 

ソリューション、あなたのコンストラクタを作るには、constの参照を(それはとにかく渡されたオブジェクトを変更するべきではありません)を取ります:

TextureCoordinates(Point2D& origin, Dimensions2D& dim); 

あなたは

にコンストラクタの署名を変更することにより、それを修正することができます
TextureCoordinates(Point2D& origin, const Dimensions2D& dim); 
TextureCoordinates(Point2D& origin, Dimensions2D&& dim); // alternative for c++11 

(できれば) または変数

Dimension2D dim=Dimensions2D(width, height); 
TextureCoordinates result(point, dim) 
-1

は、あなたがの実装書いたパラメータ作る:

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

は外Dimensions2dを宣言します。その後、あなたはすぐに消えるために起こっている機能の一時的なオブジェクトの値を変更することができますので、

Dimension2d d(width, height); 
TextureCoordinates result(point, d); 
0

一時変数は、C++での参照として渡すことはできません!そのような問題は存在しません。 関数定義は次のようになります

TextureCoordinates(Point2D const& origin, Dimensions2D const& dim); 
関連する問題