繁体   English   中英

C ++“没有匹配的构造函数,无法初始化”编译器错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM