Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比较一个类的两个实例中的变量_C++_Oop - Fatal编程技术网

C++ 比较一个类的两个实例中的变量

C++ 比较一个类的两个实例中的变量,c++,oop,C++,Oop,我希望有一个关于我正在构建的一些代码的快速问题。。基本上,我想比较一个类(金鱼)的两个实例之间的变量,看看其中一个是否在另一个的范围内。它们都有领土类别,而领土类别又使用由x和y数据点组成的点类别 现在我很想知道为什么下面的方法不起作用,请: (此代码位比较两个点:a和b,每个点有两个点,东北(ne)和西南(sw)以及它们的x和y图) 如果((a->x_-ne x_-ne&&a->y_-ne)&& (a->x_sw=>b->x_sw&&a->y_sw=>b->sw){ 返回true; }否则返回

我希望有一个关于我正在构建的一些代码的快速问题。。基本上,我想比较一个类(金鱼)的两个实例之间的变量,看看其中一个是否在另一个的范围内。它们都有领土类别,而领土类别又使用由x和y数据点组成的点类别

现在我很想知道为什么下面的方法不起作用,请:

(此代码位比较两个点:a和b,每个点有两个点,东北(ne)和西南(sw)以及它们的x和y图) 如果((a->x_-ne x_-ne&&a->y_-ne)&& (a->x_sw=>b->x_sw&&a->y_sw=>b->sw){ 返回true; }否则返回false

我可以想到一个工作(例如,通过一个get定位方法),并使用主体中的函数来比较,但我很好奇,知道,作为一个崭露头角的C++程序员——为什么上面的,或者类似的实现似乎不起作用。 还有,实现上述目标的最干净、最优雅的方式是什么?也许有朋友的作用

非常感谢

编辑:添加了一些注释(希望使变量更清晰)

//类点{
//公众:
//浮动x;
//浮动y;
//点(浮点x_in,浮点y_in){//2参数构造函数
//x=x_英寸;
//y=y_英寸;
//   }
// };
//阶级领域{
//私人:
//东北、西南点;
//公众:
//地域(浮动x_ne、浮动y_ne、浮动x_sw、浮动y_sw)
//:ne(x_ne,y_ne),sw(x_sw,y_sw){
//   }  
//bool包含检查(区域a、区域b){
////检查a是否包含在b中(按顺序!)
//如果((a->x_-ne x_-ne&&a->y_-ne)&&
//(a->x_sw=>b->x_sw&&a->y_sw=>b->sw){
//返回true;
//}否则返回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() 
// };
/};
//等级金鱼{
//受保护:
//浮子大小;
//点位;
//领土地球;
//公众:
//金鱼(浮体x,浮体y):位置(x,y),陆地(x-1,y-1,x+1,y+1){
//尺寸=2.3;
// }
//void return(){//如果攻击失败,会发生什么情况
//     /*
//if(金鱼.尺寸[1]-金鱼.尺寸[2]0){
//尺寸=尺寸-0.2;
//     } 
//     */
//   }
//无效胜利(){
//   }
//无效攻击(){
//   }
////void goldfish()
// };

乍一看:没有=>运算符。乍一看,它被称为>=

运算符。没有=>运算符。它被称为>=

bool contain_check(territory a, territory b)
您正在传入两个territory对象,而不是指向territory对象的指针。因此,您需要使用
操作符而不是
->
操作符来访问成员。类似于:

a.ne
此外,您已将
ne
sw
成员声明为私有,这意味着不相关的函数无法访问它们。它们需要是公共的,以便
contain\u check()
函数访问它们

您正在传入两个territory对象,而不是指向territory对象的指针。因此,您需要使用
操作符而不是
->
操作符来访问成员。类似于:

a.ne

此外,您已将
ne
sw
成员声明为私有,这意味着不相关的函数无法访问它们。它们需要为
contain\u check()公开
函数访问它们。

假设您的区域是矩形,并且您通过比较两个类(ne和nw)的角点来检测重叠您只检查西北角和东北角,这两个角有一个直线区域。正如@eric Malenfant所提到的,您有作为类成员的结构,这些成员由“.”操作符访问。这些成员是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;
if((a->x_-ne x_-ne&&a->y_-ne)和
(a->x_nw=>b->x_nw&&a->y_nw=>b->nw)){
返回true;
}否则返回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));
return((a.ne.x=b.sw.y));

假设您的区域是矩形,并且通过比较两个类(ne和nw)的角来检测重叠您只检查西北角和东北角,这两个角有一个直线区域。正如@eric Malenfant所提到的,您有作为类成员的结构,这些成员由“.”操作符访问。这些成员是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;
if((a->x_-ne x_-ne&&a->y_-ne)和
(a->x_nw=>b->x_nw&&a->y_nw=>b->nw)){
返回true;
}否则返回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));
return((a.ne.x=b.sw.y));

> P>我注意到两个可能的问题(注:不是C++专家):

您使用=>表示“大于或等于”,其中应为>=


也可以认为B->NE应该是B->yne。

< P>我注意到两个可能的问题,即:不是C++专家:

您使用=>表示“大于或等于”,其中应为>=

另外,我认为b->ne应该是b->y_ne。

你说的“不工作”是什么意思?我不编译

如果
contain\u check
是按您的帖子所示编写的,则问题在于您在非指针上使用了箭头运算符。请改用点:

    if ((a.x_ne <= b.x_ne && a.y_ne <= b.ne) //etc.
if((a.x_ne你说的“不工作”是什么意思?我不编译

如果
contain\u check
是按您的帖子所示编写的,则问题在于您在非指针上使用了箭头运算符。请改用点:

    if ((a.x_ne <= b.x_ne && a.y_ne <= b.ne) //etc.
if((a.x_ne对不起,我显然(非常)困惑。谢谢大家!下面的作品:

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;
  }
if((a.ne.x=b.sw.y)){
返回true;
}否则返回false;
}
对不起,我显然(非常)困惑。谢谢大家!下面的作品:

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;
  }
if((a.ne.x=b.sw.y)){
返回true;
}否则返回false;
}

方法bool territory::contain_check(const territory&a、const territory&b);应为