2015-01-01 5 views
-4

Получение ERROR Помощь НеобходимоеВызов функции из структуры

struct Point { 
     double x , y ; 
     double del ; 
     Point() {} 
     Point (double _x , double _y){ x = _x; y = _y;} 

     double Dist(const Point &P){ double dx = x - P.x ; double dy = y - P.y; return sqrt(dx*dx + dy *dy);} 

}; 

int ccw (Point p,Point q ,Point r) 
{ 

     double val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); 


     if(fabs(val) < EPS) return 0; 
     if(val > EPS) return 1; 
     else return 2 ; 

} 

struct seg2 { 
     Point a, b; 
     seg2(){} 
     seg2(Point _a ,Point _b){a = _a;b= _b;} 
     double length(){ return a.Dist(b);} 
     bool onseg(const Point &p) { 
       return (a.Dist(p) + b.Dist(p) - length() < 0); 
     } 
     bool isIntersect (const seg2& S){ 
       int o1 = ccw(a, b, S.a); 
       int o2 = ccw(a, b, S.b); 
       int o3 = ccw(S.a, S.b, a); 
       int o4 = ccw(S.a, S.b, b); 

       if(o1 != o2 && o3 != o4){ 
         return true; 
       } 
       if(o1 == 0 && onseg(S.a)) return true; 
       if(o2 == 0 && onseg(S.b)) return true; 

       if(o3 == 0 && S.onseg(a)) return true; // Here I want to call S.onseg 
       if(o4 == 0 && S.onseg(b)) return true; // Here 
       return false; 
     } 


}; 

Я дал эту ошибку

member function 'onseg' not viable: 'this' argument has type 'const seg2', 
     but function is not marked const 
       if(o3 == 0 && S.onseg(a)) return true; 

'onseg' declared here 
     bool onseg(const Point &p) { 

member function 'onseg' not viable: 'this' argument has type 'const seg2', 
     but function is not marked const 
       if(o4 == 0 && S.onseg(b)) return true; 

'onseg' declared here 
     bool onseg(const Point &p) { 

Это программа, которая два сегмента линии пересекаются или не Но я не могу позвонить в onseg function from struct :( C++ code .. Это дает мне компиляцию Ошибка .. Как я могу позвонить?

+4

Вам необходимо, по крайней мере, дать нам ошибку, которую вы видите –

+0

@ Matrix.code [В вашем вопросе, конечно!] (Http://stackoverflow.com/posts/27733184/edit) –

ответ

0
bool isIntersect (const seg2& S){ 

S объявлен const, а затем вы пытаетесь вызвать non-const функцию, что: -

S.onseg(a); <<<< `non-const` function. 

Изменить ваше определение функции для: -

bool onseg(const Point &p) const    <<<<<<<<< const added 
{ 
    return (a.Dist(p) + b.Dist(p) - length() < 0); 
} 

, чтобы const а как non-const объект называют это.

+0

Are есть ли какая-нибудь полезная причина для использования const? Если нет, тогда я могу объявлять функции без параметра const. –

+0

Всегда лучше создавать функцию const, если это не изменит элементы данных ... Вы узнаете больше об этом, просто посмотрев на const-correctness. – ravi

Смежные вопросы