2011-11-12 53 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))传递给它。临时,即使是非常量的,也不会绑定到非常量引用。

解决方案,让您的构造函数取常量引用(它不应该修改传递的对象反正):

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

第二个参数是不能被绑定到左值引用构造函数需要一个右值:

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); 
相关问题