我有一个试图初始化的类,但得到错误消息“没有匹配的构造函数来初始化'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) {}
你知道我做错了什么吗?
发布于 2011-11-12 08:28:23
您的构造函数通过非常数引用接受参数,但您将一个临时对象(Dimensions2D(width, height)
)传递给它。临时对象,即使是非常量对象,也不绑定非常量引用。
解决方案,让你的构造函数接受常量引用(它无论如何都不应该修改传递的对象):
TextureCoordinates(Point2D const& origin, Dimensions2D const& dim);
发布于 2011-11-12 08:28:56
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)
发布于 2011-11-12 08:30:42
在外部声明Dimensions2d。
Dimension2d d(width, height);
TextureCoordinates result(point, d);
https://stackoverflow.com/questions/8101489
复制相似问题