C++ C++&引用;没有匹配的构造函数用于初始化";编译错误

C++ C++&引用;没有匹配的构造函数用于初始化";编译错误,c++,constructor,C++,Constructor,我有一个类,我试图初始化,但得到错误“没有匹配的构造函数初始化'TextureCoordinates'” 我正在尝试初始化的类: class TextureCoordinates { public: TextureCoordinates(){}; TextureCoordinates(Point2D& origin, Dimensions2D& dim); Point2D getOrigin() const {return origin;}; Di

我有一个类,我试图初始化,但得到错误“没有匹配的构造函数初始化'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)
)。临时变量,即使是非常量变量,也不会绑定到非常量引用

解决方案中,使构造函数接受常量引用(它无论如何都不应该修改传递的对象):

第二个参数是不能绑定到构造函数期望的左值引用的右值:

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)

您是否编写了以下内容的实现:

TextureCoordinates(Point2D& origin, Dimensions2D& dim);

在外部声明尺寸2d

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

在C++中,临时变量不能作为引用传递,因为这样可以更改函数中的临时对象的值,该函数很快就会消失!引用常量时不存在此类问题。。。。。 所以你的函数定义应该是

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

构造函数的定义在哪里?我看到的只是宣言。
Dimension2d d(width, height);
TextureCoordinates result(point, d);
TextureCoordinates(Point2D const& origin, Dimensions2D const& dim);