2017-04-27 489 views
-3

我想为我的凸包项目 Calipers()创建函数。我试图创建一个类的点,但 我似乎无法使用点来提取p []。x的值到rotatePoint.x 谢谢。错误:无法从Double **转换为Double

#include "point.h" 

void Point::Set_value(Point p) 
{ 

    x=p.x;      
    y=p.y; 

} 

void Point::Set_value(double nx,double ny) 
{ 
    x=nx; 
    y=ny; 
} 

void comp_geo::Calipers(int n, Point *p) 
{ 
     double Cx = &p[n].x; 
     double Cy = &p[n].y; 
     rotatePoint.x = Cx; 
     rotatePoint.y = Cy; 

} 

卡尺()不起作用。

+1

什么部分“无法从Double **转换成Double”你不明白?试图将一个指针指向“double”,你期望完成什么? –

+0

整个部分。因此,这个问题。 如果我使用'* p [n] .x'告诉我使用< - 当我使用它时,它告诉我我没有正确使用它。 –

+0

在C++中没有这样的“< - ”,所以编译器在逻辑上不可能告诉你这么做。如果你不明白的话,正确的做法是不要尝试对代码进行随机修改,横过你的手指,并希望它以某种方式工作。正确的方法是检查你的C++书,并试着理解***为什么你会得到编译错误。一旦你明白了根本原因,你就会知道需要做些什么来修复它。 –

回答

0

你需要摆脱&运营商:

void comp_geo::Calipers(int n, Point *p) 
{ 
    double Cx = p[n].x; 
    double Cy = p[n].y; 
    rotatePoint.x = Cx; 
    rotatePoint.y = Cy;` 
} 

这可以简化为这样:

void comp_geo::Calipers(int n, Point *p) 
{ 
    rotatePoint.x = p[n].x; 
    rotatePoint.y = p[n].y; 
} 

甚至这个(假设rotatePointPoint):

void comp_geo::Calipers(int n, Point *p) 
{ 
    rotatePoint = p[n]; 
    // or: 
    // rotatePoint.Set_value(p[n]); 
} 

在一个侧面说明,Point::Set_value(Point)应通过值取Point通过const参考,而不是:

void Point::Set_value(const Point &p) 
{ 
    x = p.x; 
    y = p.y; 
} 
+0

这个。 我甚至不知道为什么我试图使用一个指针。谢谢。 –

+0

我试着在另一个函数中调用这个函数(有效地试图从p []复制到rotatepoint []。但是,只有当我把代码分解成main()时,复制才有效。是否有任何方法可以调用Caliper ()没有变量时变成零当我printf? –

+0

@MarcoPang请[编辑]你的问题,以显示代码不适合你。你显然仍然做错了它。 –

0
void comp_geo::Calipers(int n, Point *p) 
{ 
    double Cx = **&**p[n].x; 
    double Cy = **&**p[n].y; 
    rotatePoint.x = Cx; 
    rotatePoint.y = Cy;` 
} 

是不需要的符号,因为它指的是存储器位置的地址,而不是值。

void comp_geo::Calipers(int n, Point *p) 
{ 
    rotatePoint.x = p[n].x; 
    rotatePoint.y = p[n].y; 
}