在由类数组引用的类的单个实例中调用成员函数(Calling a member function in a single instance of a class that is referenced b

编程入门 行业动态 更新时间:2024-10-28 15:26:21
在由类数组引用的类的单个实例中调用成员函数(Calling a member function in a single instance of a class that is referenced by an array of classes)

所以这是我的主要功能。 我只是试图测试类的数组及其成员函数是否有效(他们没有)。

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错误:将'locCircles'声明为函数数组133错误:'locCircles'未在此范围内声明

有人有建议吗? 我一直在摆弄和研究这几个小时。 谢谢。

So here is my main function. I was just trying to test if the array of classes and their member functions worked (which they did not).

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; }

And these are the classes.

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; };

I can't seem to get rid of the build errors:

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

Does anyone have any advice? I have been fiddling and researching this for hours. Thanks.

最满意答案

您需要为Circle类定义默认构造,并从Circle locCircles[5]();删除括号Circle locCircles[5](); (即改为Circle locCircles[5]; )

现场演示

You need to define a default construct for your Circle class and remove parentheses from Circle locCircles[5](); (i.e., change to Circle locCircles[5];)

Live Demo

更多推荐

本文发布于:2023-08-07 18:59:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465800.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   函数   实例   成员   member

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!