我有一个家庭作业,要求我创建一个名为Coord的类,其中包含两个名为xval和yval的双变量。在课堂上,应该有construtor和display方法以及名为conPol()的友元函数。 convPol()应该接受两个双,r和theta将极坐标转换为极坐标。我有一切编码,除了现在我遇到了一些错误。 这是我到目前为止所拥有的
#include <iostream>
#include <cmath>
using namespace std;
class Coord
{
friend double covPol(Coord&, Coord&);
private:
double xval, yval;
public:
Coord(double, double);
void display();
};
Coord::Coord(double X, double Y)
{
xval = X;
yval = Y;
}
void Coord::display()
{
cout << "The x-cordinate is: " << endl;
cout << "The y- coordinate is: " << endl;
}
double convPol(Coord &r, Coord &theta)
{
xval = r* cos (theta);
yval = r* sin (theta);
}
int main()
{
Coord One(2 , 4);
One.convPol(2,4);
One.display();
return 0;
}
以下是错误:
Error 1 error C2065: 'xval' : undeclared identifier c:\users\thomas\documents\visual studio 2013\projects\conpol().cpp\conpol().cpp\source.cpp 36 1 conPol().cpp
Error 2 error C2665: 'cos' : none of the 3 overloads could convert all the argument types c:\users\thomas\documents\visual studio 2013\projects\conpol().cpp\conpol().cpp\source.cpp 36 1 conPol().cpp
Error 3 error C2065: 'yval' : undeclared identifier c:\users\thomas\documents\visual studio 2013\projects\conpol().cpp\conpol().cpp\source.cpp 37 1 conPol().cpp
Error 4 error C2665: 'sin' : none of the 3 overloads could convert all the argument types c:\users\thomas\documents\visual studio 2013\projects\conpol().cpp\conpol().cpp\source.cpp 37 1 conPol().cpp
Error 5 error C2039: 'convPol' : is not a member of 'Coord' c:\users\thomas\documents\visual studio 2013\projects\conpol().cpp\conpol().cpp\source.cpp 45 1 conPol().cpp
6 IntelliSense: identifier "xval" is undefined c:\Users\Thomas\Documents\Visual Studio 2013\Projects\conPol().cpp\conPol().cpp\Source.cpp 36 2 conPol().cpp
7 IntelliSense: no instance of overloaded function "cos" matches the argument list
argument types are: (Coord) c:\Users\Thomas\Documents\Visual Studio 2013\Projects\conPol().cpp\conPol().cpp\Source.cpp 36 12 conPol().cpp
8 IntelliSense: identifier "yval" is undefined c:\Users\Thomas\Documents\Visual Studio 2013\Projects\conPol().cpp\conPol().cpp\Source.cpp 37 2 conPol().cpp
9 IntelliSense: no instance of overloaded function "sin" matches the argument list
argument types are: (Coord) c:\Users\Thomas\Documents\Visual Studio 2013\Projects\conPol().cpp\conPol().cpp\Source.cpp 37 12 conPol().cpp
据我所知,我朋友的功能是不能从我的班级获取私有变量。此外,我的罪和cos功能不起作用。我已经加入了,所以我不确定为什么它不起作用。至于朋友功能无法获取变量,我不知道。
答案 0 :(得分:0)
从您的代码中,您正在尝试完成极坐标转换为矩形转换。
既然你已经掌握了构造函数,你甚至不需要友元函数。参数也应该是float或double类型而不是Coord。
因此功能签名是:
Coord convPol(double r, double theta)
{
double xval = r* cos (theta),
yval = r* sin (theta);
return Coord(xval, yval);
}
此功能足以达到您想要达到的目的。
答案 1 :(得分:0)
friend
唯一能做的就是放宽权限。
convPol
,正如您所定义的那样,是一个全局函数,而不是Coord
的成员函数。因此,将其称为成员函数或将其实现为成员函数是没有意义的。但是如果它要操纵Coord
类型的任何实际对象,您可以访问此函数内的xval
和yval
成员。
关于sin
和cos
无效,错误消息会告诉您原因:
no instance of overloaded function "cos" matches the argument list
argument types are: (Coord)
这会提示您检查传入的变量的类型:例如当您致电cos(theta)
时,您会发现theta
的类型为Coord
。那肯定不是你的意思!
答案 2 :(得分:0)
您在文中提到了几个好友功能:conPol()
和convPol()
,然后在代码中提到了covPol(Coord&, Coord&)
和convPol(Coord &r, Coord &theta)
。我首先想弄清楚你想要什么函数被调用。