[英]C++ “No matching constructor for initialization of” compiler error
我有一个尝试初始化的类,但收到错误“初始化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) {}
有什么想法我做错了吗?
您的构造函数通过非const引用获取参数,但是您向其传递了一个临时对象( Dimensions2D(width, height)
)。 临时对象,即使是非常量引用,也不会绑定到非常量引用。
解决方案,使您的构造函数采用const引用(无论如何,它都不应修改传递的对象):
TextureCoordinates(Point2D const& origin, Dimensions2D const& dim);
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)
在外部声明Dimensions2d。
Dimension2d d(width, height);
TextureCoordinates result(point, d);
临时变量不能作为C ++中的引用传递,因为这样您就可以在即将消失的函数中更改临时对象的值! 没有这样的问题可以引用常量.....所以您的函数定义应该像
TextureCoordinates(Point2D const& origin, Dimensions2D const& dim);
您是否编写了以下内容的实现:
TextureCoordinates(Point2D& origin, Dimensions2D& dim);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.