2016-04-03 11 views
-3

Ich versuche, etwas Code aus einer Berechnung Geometrie Buch zu nehmen, und ich fand diesen Fehler Hilfe brauchen!Was ist der Fehler in meiner Klassendefinition?

class Point2D{ 
     .. 
     .. 
     some functions 
     .. 
     .. 

     int classify(Point2D &p0, Point2D &p1) { 
       Point2D p2 = *this; 
       Point2D a = p1 - p0; 
       Point2D b = p2 - p0; 
       double sa = a.x * b.y - b.x * a.y; 

       if (sa > 0.0) return LEFT; 
       if (sa < 0.0) return RIGHT; 
       if ((a.x * b.x < 0.0) || (a.y * b.y < 0.0)) return BEHIND; 
       if (a.length() < b.length()) return BEYOHD; 
       if (p0 == p2) return ORIGIN; 
       if (p1 == p2) return DESTINATION; 
       return BETWEEN; 
     } 

     int classify(Edge2D ed) { 
       return Point2D::classify(ed.org, ed.dest); 
     } 


}; 

class Edge2D { 
public: 
     Point2D org; 
     Point2D dest; 

     ...bla bla bla 

}; 

Compiler-Fehler:

syntax error: identifier 'Edge2D' 
'ed': undeclared identifier 
left of '.org' must have class/struct/union 
left of 'dest' must have class/struct union 
'Point2D::classify': no overloaded function takes 1 arguments 

Hilfe! :(

+2

Klasse 'Edge2D' muss' Point2D' vor Erklärung zu erkennen, wie dieses Problem zu lösen können Sie [hier lesen] (http : //stackoverflow.com/questions/625799/resolve-circular-dependencies-in-c). –

Antwort

0

Sie mit der Vorwärts Erklärung Edge2D Klasse vor Point2D Klasse.

class Edge2D; 
class Point2D{ 
    // your class members... 
}; 
class Edge2D{ 
    // your class members.. 
}; 
+0

Wenn Sie beide Klassen in der gleichen Datei implementieren, wird es nicht funktionieren. der Compiler zeigt Fehler: mit undefinierten Typ von .. .... aber es funktioniert für mich, als ich implementiert - die Methode der ersten Klasse, die die zweite Klasse verwendet - nach der zweiten Klasse so etwas wie diese Klasse Edge2D; Klasse Point2D { int Klassifizieren (Edge2D &e); // hier erklärt, sondern muss nach Klasse edge2D Klasse definiert werden} Klasse edge2D { Point2D p1, p1; } int Point2D :: klassifizieren (Edge2D & e) { lab lab la; } das wird funktionieren) –

+0

@MohamedKhaled meine Antwort wird auch funktionieren. Hast du meine Antwort überprüft? – Shiv

Verwandte Themen