首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++“没有匹配的构造函数用于初始化”编译器错误

C++“没有匹配的构造函数用于初始化”编译器错误
EN

Stack Overflow用户
提问于 2011-11-12 08:25:05
回答 5查看 36.9K关注 0票数 18

我有一个试图初始化的类,但得到错误消息“没有匹配的构造函数来初始化'TextureCoordinates'";

我正在尝试初始化的类:

代码语言:javascript
复制
class TextureCoordinates
{
public:
    TextureCoordinates(){};
    TextureCoordinates(Point2D& origin, Dimensions2D& dim);
    Point2D getOrigin() const {return origin;};
    Dimensions2D getDim() const {return dim;};
private:
    Point2D origin;
    Dimensions2D dim;
};

带有编译器错误的行:

代码语言:javascript
复制
TextureCoordinates result(point, Dimensions2D(width, height));

构造函数的定义:

代码语言:javascript
复制
TextureCoordinates::TextureCoordinates(Point2D& origin, Dimensions2D& dim):
origin(origin), dim(dim) {}

你知道我做错了什么吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-12 08:28:23

您的构造函数通过非常数引用接受参数,但您将一个临时对象(Dimensions2D(width, height))传递给它。临时对象,即使是非常量对象,也不绑定非常量引用。

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

代码语言:javascript
复制
TextureCoordinates(Point2D const& origin, Dimensions2D const& dim);
票数 18
EN

Stack Overflow用户

发布于 2011-11-12 08:28:56

代码语言:javascript
复制
TextureCoordinates result(point, Dimensions2D(width, height))

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

代码语言:javascript
复制
TextureCoordinates(Point2D& origin, Dimensions2D& dim);

您可以通过将构造函数的签名更改为

代码语言:javascript
复制
TextureCoordinates(Point2D& origin, const Dimensions2D& dim);
TextureCoordinates(Point2D& origin, Dimensions2D&& dim); // alternative for c++11

(如果可以)或将参数设置为变量

代码语言:javascript
复制
Dimension2D dim=Dimensions2D(width, height);
TextureCoordinates result(point, dim)
票数 4
EN

Stack Overflow用户

发布于 2011-11-12 08:30:42

在外部声明Dimensions2d。

代码语言:javascript
复制
Dimension2d d(width, height);
TextureCoordinates result(point, d);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8101489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档