2014-07-09 3 views
0

여기 내 주요 기능은 다음과 같습니다. 클래스의 배열과 그 멤버 함수가 작동하는지 테스트하려고했습니다. (그들은하지 않았습니다).클래스 배열에서 참조하는 클래스의 단일 인스턴스에서 멤버 함수 호출

int main(void) 
{ 
    Circle locCircles[5](); 
    locCircles[0].setCircle(0.000597, 32.684114, -117.180610); 
    cout << locCircles[0] << endl; 
    cout << "Hello world!" << endl; 
    return 0; 
} 

그리고 이들은 클래스입니다.

class Point2d{ 
public: 
    Point2d() {} 
    Point2d(double x, double y) 
     : X(x), Y(y) {} 

    double x() const { return X; } 
    double y() const { return Y; } 

    /** 
    * Returns the norm of this vector. 
    * @return the norm 
    */ 
    double norm() const { 
     return sqrt(X * X + Y * Y); 
    } 

    void setCoords(double x, double y) { 
     X = x; Y = y; 
    } 

    // Print point 
    friend std::ostream& operator << (std::ostream& s, const Point2d& p) { 
     s << p.x() << " " << p.y(); 
     return s; 
    } 
private: 
    double X; 
    double Y; 
}; 

class Circle{ 
public: 
    /** 
    * @param R - radius 
    * @param C - center 
    */ 
    Circle(double R, Point2d& C) 
     : r(R), c(C) {} 

    /** 
    * @param R - radius 
    * @param X - center's x coordinate 
    * @param Y - center's y coordinate 
    */ 
    Circle(double R, double X, double Y) 
     : r(R), c(X, Y) {} 

    void setCircle(double r, double x, double y) { 
     r = r; c.setCoords(x, y); 
    } 

    Point2d getC() const { return c; } 
    double getR() const { return r; } 

    size_t intersect(const Circle& C2, Point2d& i1, Point2d& i2) { 
     // distance between the centers 
     double d = Point2d(c.x() - C2.c.x(), 
       c.y() - C2.c.y()).norm(); 

     // find number of solutions 
     if(d > r + C2.r) // circles are too far apart, no solution(s) 
     { 
      std::cout << "Circles are too far apart\n"; 
      return 0; 
     } 
     else if(d == 0 && r == C2.r) // circles coincide 
     { 
      std::cout << "Circles coincide\n"; 
      return 0; 
     } 
     // one circle contains the other 
     else if(d + min(r, C2.r) < max(r, C2.r)) 
     { 
      std::cout << "One circle contains the other\n"; 
      return 0; 
     } 
     else 
     { 
      double a = (r*r - C2.r*C2.r + d*d)/ (2.0*d); 
      double h = sqrt(r*r - a*a); 

      // find p2 
      Point2d p2(c.x() + (a * (C2.c.x() - c.x()))/d, 
        c.y() + (a * (C2.c.y() - c.y()))/d); 

      // find intersection points p3 
      i1.setCoords(p2.x() + (h * (C2.c.y() - c.y())/ d), 
        p2.y() - (h * (C2.c.x() - c.x())/ d) 
      ); 
      i2.setCoords(p2.x() - (h * (C2.c.y() - c.y())/ d), 
        p2.y() + (h * (C2.c.x() - c.x())/ d) 
      ); 

      if(d == r + C2.r) 
       return 1; 
      return 2; 
     } 
    } 

    // Print circle 
    friend std::ostream& operator << (std::ostream& s, const Circle& C) { 
     s << "Center: " << C.getC() << ", r = " << C.getR(); 
     return s; 
    } 
private: 
    // radius 
    double r; 
    // center 
    Point2d c; 

}; 

내가 빌드 오류를 제거 할 수없는 것 :

132 error: declaration of 'locCircles' as array of functions 133 error: 'locCircles' was not declared in this scope

는 사람이 어떤 조언이 있습니까? 나는 몇 시간 동안 열중하고 연구하고있다. 감사합니다. .

+0

는'Circle'는 기본 생성자를 필요로 당신의 Circle 클래스에 대한 기본 구조를 정의하고 (Circle locCircles[5];에 즉, 변경) Circle locCircles[5]();에서 괄호를 제거해야합니다. –

답변

1

당신은

Live Demo

+0

@CaptainObvlious LOL 내가 이걸 가지고 있지 않니? – 101010

+0

C++에서 가장 짜증나는 구문 분석하기 – Niall

+0

@Niall 나는 이것을 바로 잡았다 : – 101010