我希望是一个关于我正在构建的一些代码的快速问题..基本上我想比较一个类(金鱼)的两个实例之间的变量,看看是否在另一个的领域内。他们都有领土分支,而后者则使用由x和y数据点组成的点分支。
现在我很想知道为什么以下不起作用请
(这段代码比较两点:a& b,每个点有两个点,东北(ne)和西南(sw)及其x和y图) if((a-> x_ne< = b-> x_ne&& a-> y_ne< = b-> ne)&& (a-> x_sw => b-> x_sw&& a-> y_sw => b-> sw)){ 返回true; } else return false;
我可以想到一个解决方法(例如,通过使用get location方法),并使用主体中的函数进行比较,但我很好奇地知道 - 作为一个萌芽的c ++程序员 - 为什么以上,或类似的实现似乎不起作用。
而且,实现上述目标的最干净,最优雅的方式是什么?有朋友的功能吗?
非常感谢编辑:添加了一些注释(希望使变量更清晰)
// class point {
// public:
// float x;
// float y;
// point(float x_in, float y_in) { //the 2 arg constructor
// x = x_in;
// y = y_in;
// }
// };
// class territory {
// private:
// point ne, sw;
// public:
// territory(float x_ne, float y_ne, float x_sw, float y_sw)
// : ne(x_ne, y_ne), sw(x_sw,y_sw) {
// }
// bool contain_check(territory a, territory b) {
// //checks if a is contained in b (in THAT order!)
// if ((a->x_ne <= b->x_ne && a->y_ne <= b-> ne) &&
// (a->x_sw => b->x_sw && a->y_sw => b-> sw)) {
// return true;
// } else return false;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
// };
// class goldfish {
// protected:
// float size;
// point pos;
// territory terr;
// public:
// goldfish(float x, float y) : pos(x,y), terr(x-1,y-1,x+1,y+1) { //constructor
// size = 2.3;
// }
// void retreat() { //what happens in the case of loss in attack
// /*
// if(goldfish.size[1] - goldfish.size[2] <= 1 && goldfish.size[1] - goldfish.size[2] > 0) {
// size = size - 0.2;
// }
// */
// }
// void triumph() {
// }
// void attack() {
// }
// // void goldfish()
// };
答案 0 :(得分:2)
乍一看:没有a =&gt;运营商。它被称为&gt; =
答案 1 :(得分:2)
假设您的区域是矩形,并且您通过比较两个类别(ne和nw)的角来检测重叠,那么您只检查具有一条线区域的西北角和东北角。正如@ÉricMalenfant所提到的,你有结构作为类成员,可以通过'。'访问。运营商。那些成员是ne和sw所以引用它们将是:“a.ne.x”
从这开始:
if ((a->x_ne <= b->x_ne && a->y_ne <= b-> ne) &&
(a->x_nw => b->x_nw && a->y_nw => b-> nw)) {
return true;
} else return false;
将其更改为:
return ( (a.ne.x <= b.ne.x && a.ne.y <= b.ne.y)
&& (a.sw.x >= b.sw.x && a.sw.y >= b.sw.y));
答案 2 :(得分:1)
“不工作”是什么意思?我不编译?
如果您的帖子中显示contain_check
,则问题是您在非指针上使用箭头运算符。改为使用点:
if ((a.x_ne <= b.x_ne && a.y_ne <= b.ne) //etc.
答案 3 :(得分:0)
bool contain_check(territory a, territory b)
您传入两个区域对象,而不是指向区域对象的指针。因此,您需要使用.
运算符来访问成员而不是->
运算符。类似的东西:
a.ne
此外,您已将ne
和sw
成员声明为私有,这意味着不相关的函数无法访问它们。他们需要公开contain_check()
函数才能访问它们。
答案 4 :(得分:0)
我注意到两个可能的问题(注意:不是C ++专家):
你使用=&gt;对于“大于或等于”,它应该是> =。
另外,我认为b-&gt; ne应该是b-&gt; y_ne。
答案 5 :(得分:0)
if ((a.ne.x <= b.ne.x && a.ne.y <= b.ne.y) &&
(a.sw.x >= b.sw.x && a.sw.y >= b.sw.y)) {
return true;
} else return false;
}
答案 6 :(得分:0)
方法bool territory :: contains_check(const territory&amp; a,const territory&amp; b);应声明为静态。这说得通。 或者,更好的是,将其写为独立功能,因为它与类别区域无关;它会检查两个实例之间的某种关系,对吧?