[英]C++ Xcode No matching constructor for initialisation of type vector2d
I have a vector2d class. 我有一个vector2d类。 I am getting the error "No matching constructor for initialisation type" on the following code : 我在以下代码中收到错误“初始化类型没有匹配的构造函数”:
vector2d vector2d::operator+(const vector2d& vector)
{
return vector2d((this->x + vector.x), (this->y + vector.y));
}
vector2d vector2d::operator-(const vector2d& vector)
{
return vector2d(this->x - vector.x, this->y - vector.y);
}
My vectors classes declarations and definitions are : 我的向量类声明和定义是:
#ifndef __VECTOR2D_H__
#define __VECTOR2D_H__
class vector2d
{
public:
float x, y , w;
vector2d(const float x, const float y) ;
vector2d(vector2d& v) ;
vector2d operator+(const vector2d& rhs);
vector2d operator-(const vector2d& rhs);
vector2d& operator+=(const vector2d& rhs);
vector2d& operator-=(const vector2d& rhs);
float operator*(const vector2d& rhs);
float crossProduct(const vector2d& vec);
vector2d normalize();
float magnitude();
};
#endif
vector2d.cpp: vector2d.cpp:
#include "vector2d.h"
#include <cmath>
vector2d::vector2d(const float x,const float y) :x(x),y(y),w(1)
{
}
vector2d::vector2d(vector2d& vector) : x(vector.x), y(vector.y), w(1)
{
}
vector2d vector2d::operator+(const vector2d& vector)
{
return vector2d((this->x + vector.x), (this->y + vector.y));
}
vector2d vector2d::operator-(const vector2d& vector)
{
return vector2d(this->x - vector.x, this->y - vector.y);
}
vector2d& vector2d::operator+=(const vector2d& vector)
{
this->x += vector.x;
this->y += vector.y;
return *this;
}
vector2d& vector2d::operator-=(const vector2d& vector)
{
this->x -= vector.x;
this->y -= vector.y;
return *this;
}
float vector2d::magnitude()
{
return sqrt(this->x * this->x + this->y * this->y);
}
//Make Unit Vector
vector2d vector2d::normalize()
{
float magnitude = this->magnitude();
float nx = 0.0f;
float ny = 0.0f;
nx = this->x / magnitude;
ny = this->y / magnitude;
return vector2d(nx,ny);
}
float vector2d::operator*(const vector2d& rhs)
{
return ( (this->x * rhs.x) + (this->y * rhs.y) );
}
float vector2d::crossProduct(const vector2d& vec)
{
return (x * vec.y - y * vec.x);
}
I am not creating the object using default constructor argument,then whats the reason for that error? 我没有使用默认构造函数参数创建对象,那么该错误的原因是什么? Note that the code ran on Visual Studio perfectly fine. 请注意,代码在Visual Studio上运行得很好。 While on Xcode i get the error. 在Xcode上时出现错误。
Your problem will be this constructor: 您的问题将是此构造函数:
vector2d(vector2d& v) ;
a standard copy constructor looks like this: 标准副本构造函数如下所示:
vector2d(const vector2d& v) ;
because in standard c++ you cannot bind a temporary to a mutable lvalue-reference 因为在标准c ++中,您不能将临时绑定到可变的左值引用
Unfortunately, Microsoft in their wisdom have unleashed a number of "extensions" (ie evil deviations from the standard) into their compiler and in MSVC only, a temporary will bind to a mutable l-value reference. 不幸的是,微软以他们的智慧在他们的编译器中释放了许多“扩展”(即,与标准的有害偏差),并且仅在MSVC中,临时变量会绑定到可变的l值引用。
In
real
standard c++, a temporary may bind to: 在
实际的
标准c ++中,临时项可能绑定到:
vector2d(vector2d v) ;
复制vector2d(vector2d v) ;
vector2d(const vector2d& v) ;
const左值参考vector2d(const vector2d& v) ;
vector2d(vector2d&& v) ;
一个右值参考vector2d(vector2d&& v) ;
` `
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.