我是C ++(和编程)的新手,我正在尝试使用以下访问函数实现“Point”结构:
void setData(struct Point*, int u, int v);
void getRadius(struct Point*);
该计划应该:
使用这些指南:
struct Point A; // instantiates a point at A based on the struct Point
A_ptr = &A;
setData(A_ptr, 3, 4); // initializes the point A(3,4)
int Radius = getRadius(A_ptr); // calculates R and returns the value to Radius
这是我的代码(显然是错误的):
#include "stdafx.h"
#include <iostream>
#include <cmath>;
using namespace std;
// the equation of a circle is:
// (x-a)^2 + (y-b)^2 = r^2, where (a,b) are the coordinates of the center
struct Point
{
int X; // x position
int Y; // y position
float R; // radius of circle
void setData(struct Point*, int u, int v);
float getRadius(struct Point*);
void inputCoordinates(int X, int Y);
};
int main()
{
struct Point A; // instantiates a point at A based on the struct Point
A_ptr = &A;
setData(A_ptr, 3, 4); // initializes the point A(3,4)
int Radius = getRadius(A_ptr); // calculates R and returns the value to Radius
cout << "The radius of a circle with points x = " << X << " and Y = " << Y << " is: " << Radius;
}
return 0;
}
void Point::setData(struct Point*, int u, int v)
{
X = u;
Y = v;
}
float Point::getRadius(struct Point*)
{
return sqrt(pow(X,2) + pow(Y,2));
}
问题本身很简单。我似乎无法将问题(以及问题参数)“映射”到指针和结构的概念(我已经阅读过,但对我来说似乎仍然模糊)。
非常感谢任何建议和指导。
提前谢谢你看看。 --Ryan
答案 0 :(得分:0)
你的Point :: setData需要阅读:
void Point::setData(struct Point*, int u, int v)
{
point->X = u;
point->Y = v;
}
作为 - &gt;是指针的成员访问器(相当于。对于非指针变量)
或者如果您在C中编码,请将其设为函数,而不是方法:
void setData(struct Point*, int u, int v)
{
point->X = u;
point->Y = v;
}
答案 1 :(得分:0)
在您的最后两个功能setData
和getRadius
中,您永远不会使用Point
参数。
将其更改为:
void setData(Point* p, int u, int v)
{
p->X = u;
p->Y = v;
}
和
float getRadius(Point* p)
{
return sqrt(pow(p->X,2) + pow(p->Y,2));
}
换句话说,不要将它们作为Point
的成员函数。
答案 2 :(得分:0)
这就是我在C ++风格中的表现
#include <iostream>
#include <cmath>
using namespace std;
// the equation of a circle is:
// (x-a)^2 + (y-b)^2 = r^2, where (a,b) are the coordinates of the center
struct Point
{
int X; // x position
int Y; // y position
void setData(int u, int v);
float getRadius();
void inputCoordinates(int X, int Y);
};
int main()
{
Point A; // instantiates a point at A based on the struct Point
A.setData(3, 4); // initializes the point A(3,4)
float Radius = A.getRadius(); // calculates R and returns the value to Radius
cout << "The radius of a circle with points x = " << A.X << " and Y = " << A.Y << " is: " << Radius;
return 0;
}
void Point::setData(int u, int v)
{
X = u;
Y = v;
}
float Point::getRadius()
{
float value;
value = (float)sqrt(pow(X, 2) + pow(Y, 2));
return value;
}
答案 3 :(得分:0)
我强烈建议您使用float或double作为X和Y坐标的数据类型。
您的半径不应该是您的结构的成员。它在概念上不是一个点的一部分,而是描述两点之间的距离。
将参数赋予getRadius()一个名称,例如&#34; p&#34;。 然后你的getRadius()方法的主体可能只是
{
float dx = X - p->x;
float dy = Y - p->y;
return sqrt(dx * dx + dy * dy); // Pythagorean formula
}
我希望这会让你朝着正确的方向前进。