问题描述
我使用MSVC ++ .net 2003的游戏引擎并没有问题。一些用户使用相同的引擎崩溃时使用相同的引擎崩溃的
$
结构的副本是返回变量。我没有访问代码那么多b $ b崩溃,但开发人员一直在更改返回
结构的函数,因为这个问题返回其他东西。
就个人而言,我没有看到这个结构有什么问题,无法想象为什么它会在DevC ++中崩溃。
除了在宏观之外使用的所有大写字母,不管怎么说,你能发现这个结构有什么不对吗?它对我来说看起来非常合法。
。 (我知道构造函数应该使用初始化列表,而且我已建议使用
)。
struct JVEC2
{
JVEC2(浮动x = 0,浮动y = 0){this-> x = x; this-> y = y;}
//支持运算符
JVEC2运算符+(JVEC2 a)const {JVEC2 temp; temp.x = x + ax; temp.y = y +
ay; return temp;}
JVEC2运算符 - (JVEC2 a)const {JVEC2 temp; temp.x = x - ax; temp.y = y -
ay; return temp;}
JVEC2运算符*(JVEC2 a)const {JVEC2 temp; temp.x = x * ax; temp.y = y *
ay; return temp;}
JVEC2运算符/(JVEC2 a)const {JVEC2 temp; temp.x = x / ax; temp.y = y /
ay; return temp;}
JVEC2运算符+(浮点数a)const {JVEC2 temp; temp.x = x + a; temp.y = y +
a;返回temp;}
JVEC2运算符 - ( float a)const {JVEC2 temp; temp.x = x - a; temp.y = y -
a; return temp;}
JVEC2 operator *(float a) const {JVEC2 temp; temp.x = x * a; temp.y = y *
a; return temp;}
JVEC2运算符/(float a)const {JVEC2 temp; temp.x = x / a; temp.y = y /
a; return temp;}
JVEC2运算符+ =(JVEC2 a){x + = ax; y + = ay; return * this;}
JVEC2运算符* =(JVEC2 a){x * = ax; y * = ay; return * this;}
JVEC2运算符 - =(JVEC2 a){x - = ax; y - = ay; return * this;}
JVEC2运算符/ =(JVEC2 a){x / = ax; y / = ay; return * this;}
JVEC2运算符+ =(浮点数a ){x + = a; y + = a; return * this;}
JVEC2运算符 - =(浮动a){x - = a; y - = a; return * this;}
JVEC2算子* =(浮动a){x * = a; y * = a;返回* this;}
JVEC2算子/ =(浮动a){x / = a; y / = a; return * this;}
bool operator ==(JVEC2 a)const {if(x == ax&& y == ay)返回true;
else返回false;}
bool operator!=(JVEC2 a)const {if(x!= ax || y!= ay)返回true;
else返回false;}
JVEC2运算符+()const {JVEC2 t; tx = + x; ty = + y; return t;}
JVEC2运算符 - ()const {JVEC2 t; tx = -x; ty = -y; return t;}
//数据
float x,y;
};
听起来不是真的,因为你发布了这个......
DevC ++是一个IDE。结构如何崩溃IDE?
无论如何,如果没有看到崩溃的代码,我只能提出几个建议,见下文。
哎呀。
呃...... Yechhh!以下是您需要遵循的模式:
JVEC2运算符+(JVEC2 const& a)const {
返回JVEC2(x + ax,y + ay) ;
}
重写所有非复合运算符。
呃......复合作业应该返回*参考*!并且
他们应该参考const!
Yikes!同样在这里
JVEC2运算符+()const {return * this; } //一元加上确实
//没有任何花车
JVEC2运算符 - ()const {return JVEC2(-x,-y); }
V
-
请在通过电子邮件回复时删除资金'A'
我没有回复最热门的回复,请不要问
听起来不是真的,因为你发布了这个...
我对代码没有任何问题,但是当可执行文件崩溃时,使用DevC ++编译的人会遇到问题。
DevC ++是一个IDE。结构如何崩溃IDE?
无论如何,如果没有看到崩溃的代码,我只能提出几个建议,见下文。
哎哟。
是的,我同意。一直想让他改变这个。
嗯......既然他有构造函数,是的,他可以做到这一点。它woudl
简化代码,但不知道它是否可以防止崩溃。
呃......复合作业应该返回*参考*!并且
他们应该参考const!
他们会返回什么参考?如果它是临时的,那不是吗?b $ b消失了吗?哪个是对的:
JVEC2& operator-(const JVEC2 a){x = x - a.x; y = y - a.y;返回此;}
或
JVEC2& operator-(const JVEC2 a)const {JVEC2 temp; temp.x = x - ax; temp.y
= y - ay; return temp;}
Yikes!同样在这里
JVEC2运算符+()const {return * this; } //一元加上确实
//没有任何花车
JVEC2运算符 - ()const {return JVEC2(-x,-y); }
V
听起来不是真的,因为你发布了这个......
DevC ++是一个IDE。结构如何崩溃IDE?
无论如何,如果没有看到崩溃的代码,我只能提出几个建议,见下文。
Ouch。
呃......复合作业应该返回*参考*!并且
他们应该参考const!
Yikes!同样在这里
JVEC2运算符+()const {return * this; } //一元加上确实
//没有任何花车
JVEC2运算符 - ()const {return JVEC2(-x,-y); }
好的,这看起来怎么样?
struct JVEC2
{
JVEC2(浮动x = 0,浮动y = 0):x(x),y(y){}
//支持的运算符
JVEC2运算符+(JVEC2 a)const {return JVEC2(x + ax,y + ay); } $ / $
JVEC2运算符 - (JVEC2 a)const {return JVEC2(x - a.x,y - a.y); } $ / $
JVEC2运算符*(JVEC2 a)const {return JVEC2(x * a.x,y * a.y); } $ / $
JVEC2运算符/(JVEC2 a)const {return JVEC2(x / a.x,y / a.y); } $ / $
JVEC2运算符+(float a)const {return JVEC2(x + a,y + a); } $ / $
JVEC2 operator-(float a)const {return JVEC2(x - a,y - a); } $ / $
JVEC2运算符*(float a)const {return JVEC2(x * a,y * a); } $ / $
JVEC2运算符/(float a)const {return JVEC2(x / a,y / a); }
JVEC2& operator + =(const JVEC2& a){x + = a.x; y + = a.y; return * this;}
JVEC2& operator * =(const JVEC2& a){x * = a.x; y * = a.y; return * this;}
JVEC2& operator - =(const JVEC2& a){x - = a.x; y - = a.y; return * this;}
JVEC2& operator / =(const JVEC2& a){x / = a.x; y / = a.y; return * this;}
JVEC2& operator + =(float a){x + = a; y + = a; return * this;}
JVEC2& operator - =(float a){x - = a; y - = a; return * this;}
JVEC2& operator * =(float a){x * = a; y * = a; return * this;}
JVEC2& operator / =(float a){x / = a; y / = a; return * this;}
bool operator ==(JVEC2 a)const {if(x == ax&& ; y == ay)返回true;
else返回false;}
bool operator!=(JVEC2 a)const {if(x!= ax || y! = ay)返回true;
else返回false;}
JVEC2运算符+()const {return JVEC2(+ x,+ y); } $ / $
JVEC2运算符 - ()const {return JVEC2(-x,-y); }
//数据
浮动x,y;
};
I use a game engine using MSVC++ .net 2003 and have no problems. Some users
of DevC++ who use the same engine crash at times when a copy of this
structure is the return variable. I don''t have access to the code that is
crashing, but the developer has been changing functions that return the
structure to return something else because of this problem.
Personally, I don''t see anything wrong with this structure and can''t imagine
why it would be crashing in DevC++.
Aside from the all caps used outside of a macro which is frowned upon, can
you spot anything wrong with this strucutre? It looks perfectly legitimite
to me. ( I know the consructor should be using an initializer list and I''ve
suggested that ).
struct JVEC2
{
JVEC2(float x=0,float y=0){this->x=x;this->y=y;}
// Supported operators
JVEC2 operator+(JVEC2 a) const {JVEC2 temp;temp.x = x + a.x;temp.y = y +
a.y;return temp;}
JVEC2 operator-(JVEC2 a) const {JVEC2 temp;temp.x = x - a.x;temp.y = y -
a.y;return temp;}
JVEC2 operator*(JVEC2 a) const {JVEC2 temp;temp.x = x * a.x;temp.y = y *
a.y;return temp;}
JVEC2 operator/(JVEC2 a) const {JVEC2 temp;temp.x = x / a.x;temp.y = y /
a.y;return temp;}
JVEC2 operator+(float a) const {JVEC2 temp;temp.x = x + a;temp.y = y +
a;return temp;}
JVEC2 operator-(float a) const {JVEC2 temp;temp.x = x - a;temp.y = y -
a;return temp;}
JVEC2 operator*(float a) const {JVEC2 temp;temp.x = x * a;temp.y = y *
a;return temp;}
JVEC2 operator/(float a) const {JVEC2 temp;temp.x = x / a;temp.y = y /
a;return temp;}
JVEC2 operator+=(JVEC2 a) {x += a.x;y += a.y;return *this;}
JVEC2 operator*=(JVEC2 a) {x *= a.x;y *= a.y;return *this;}
JVEC2 operator-=(JVEC2 a) {x -= a.x;y -= a.y;return *this;}
JVEC2 operator/=(JVEC2 a) {x /= a.x;y /= a.y;return *this;}
JVEC2 operator+=(float a) {x += a;y += a;return *this;}
JVEC2 operator-=(float a) {x -= a;y -= a;return *this;}
JVEC2 operator*=(float a) {x *= a;y *= a;return *this;}
JVEC2 operator/=(float a) {x /= a;y /= a;return *this;}
bool operator == (JVEC2 a) const {if (x == a.x && y == a.y) return true;
else return false;}
bool operator != (JVEC2 a) const {if (x != a.x || y != a.y) return true;
else return false;}
JVEC2 operator + () const {JVEC2 t;t.x=+x;t.y=+y;return t;}
JVEC2 operator - () const {JVEC2 t;t.x=-x;t.y=-y;return t;}
// data
float x,y;
};
Doesn''t really sound like it, since you''re posting this...
DevC++ is an IDE. How can a struct crash an IDE?
Anyway, without seeing the code that does crash, I can only make
a few suggestions, see below.
Ouch.
Ugh... Yechhh! Here is the pattern you need to follow:
JVEC2 operator+(JVEC2 const& a) const {
return JVEC2(x + a.x, y + a.y);
}
Rewrite all non-compound operators.
Ugh... Compound assignments should return a *reference*! And
they should take a ref to const!
Yikes! Same here
JVEC2 operator +() const { return *this; } // unary plus does
// nothing for floats
JVEC2 operator -() const { return JVEC2(-x, -y); }
V
--
Please remove capital ''A''s when replying by e-mail
I do not respond to top-posted replies, please don''t ask
Doesn''t really sound like it, since you''re posting this...
I have no problems with the code, but people who compile with DevC++ have
problems when the executable crashes.
DevC++ is an IDE. How can a struct crash an IDE?
Anyway, without seeing the code that does crash, I can only make
a few suggestions, see below.
Ouch.
Yeah, I agree. Been trying to get him to change this.
Ugh... Yechhh! Here is the pattern you need to follow:
JVEC2 operator+(JVEC2 const& a) const {
return JVEC2(x + a.x, y + a.y);
}
Hmm.. now that he has the constructor, yeah, he can do this. It woudl
simplify the code, but don''t know if it could prevent a crash.
Ugh... Compound assignments should return a *reference*! And
they should take a ref to const!
What would they return a reference to though? If it''s the temp, won''t that
disappear? Which is correct:
JVEC2& operator-(const JVEC2 a) {x = x - a.x; y = y - a.y; return this;}
or
JVEC2& operator-(const JVEC2 a) const {JVEC2 temp;temp.x = x - a.x;temp.y
= y - a.y;return temp;}
Yikes! Same here
JVEC2 operator +() const { return *this; } // unary plus does
// nothing for floats
JVEC2 operator -() const { return JVEC2(-x, -y); }
V
Doesn''t really sound like it, since you''re posting this...
DevC++ is an IDE. How can a struct crash an IDE?
Anyway, without seeing the code that does crash, I can only make
a few suggestions, see below.
Ouch.
Ugh... Yechhh! Here is the pattern you need to follow:
JVEC2 operator+(JVEC2 const& a) const {
return JVEC2(x + a.x, y + a.y);
}
Rewrite all non-compound operators.
Ugh... Compound assignments should return a *reference*! And
they should take a ref to const!
Yikes! Same here
JVEC2 operator +() const { return *this; } // unary plus does
// nothing for floats
JVEC2 operator -() const { return JVEC2(-x, -y); }
Okay, how does this look?
struct JVEC2
{
JVEC2(float x=0,float y=0): x(x), y(y) {}
// Supported operators
JVEC2 operator+(JVEC2 a) const { return JVEC2( x + a.x, y + a.y ); }
JVEC2 operator-(JVEC2 a) const { return JVEC2( x - a.x, y - a.y ); }
JVEC2 operator*(JVEC2 a) const { return JVEC2( x * a.x, y * a.y ); }
JVEC2 operator/(JVEC2 a) const { return JVEC2( x / a.x, y / a.y ); }
JVEC2 operator+(float a) const { return JVEC2( x + a, y + a ); }
JVEC2 operator-(float a) const { return JVEC2( x - a, y - a ); }
JVEC2 operator*(float a) const { return JVEC2( x * a, y * a ); }
JVEC2 operator/(float a) const { return JVEC2( x / a, y / a ); }
JVEC2& operator+=(const JVEC2& a) {x += a.x;y += a.y;return *this;}
JVEC2& operator*=(const JVEC2& a) {x *= a.x;y *= a.y;return *this;}
JVEC2& operator-=(const JVEC2& a) {x -= a.x;y -= a.y;return *this;}
JVEC2& operator/=(const JVEC2& a) {x /= a.x;y /= a.y;return *this;}
JVEC2& operator+=(float a) {x += a;y += a;return *this;}
JVEC2& operator-=(float a) {x -= a;y -= a;return *this;}
JVEC2& operator*=(float a) {x *= a;y *= a;return *this;}
JVEC2& operator/=(float a) {x /= a;y /= a;return *this;}
bool operator == (JVEC2 a) const {if (x == a.x && y == a.y) return true;
else return false;}
bool operator != (JVEC2 a) const {if (x != a.x || y != a.y) return true;
else return false;}
JVEC2 operator + () const {return JVEC2( +x, +y ); }
JVEC2 operator - () const {return JVEC2( -x, -y ); }
// data
float x,y;
};
这篇关于你能发现这个类/结构有什么问题吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!