友元函数不会从类中获取私有变量
Friend function won't get private variables from class
我有一个家庭作业,要求我创建一个名为Coord的类,该类包含两个名为xval和yval的双变量。在类中,应该有constructor和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:usersthomasdocumentsvisual studio 2013projectsconpol().cppconpol().cppsource.cpp 36 1 conPol().cpp
Error 2 error C2665: 'cos' : none of the 3 overloads could convert all the argument types c:usersthomasdocumentsvisual studio 2013projectsconpol().cppconpol().cppsource.cpp 36 1 conPol().cpp
Error 3 error C2065: 'yval' : undeclared identifier c:usersthomasdocumentsvisual studio 2013projectsconpol().cppconpol().cppsource.cpp 37 1 conPol().cpp
Error 4 error C2665: 'sin' : none of the 3 overloads could convert all the argument types c:usersthomasdocumentsvisual studio 2013projectsconpol().cppconpol().cppsource.cpp 37 1 conPol().cpp
Error 5 error C2039: 'convPol' : is not a member of 'Coord' c:usersthomasdocumentsvisual studio 2013projectsconpol().cppconpol().cppsource.cpp 45 1 conPol().cpp
6 IntelliSense: identifier "xval" is undefined c:UsersThomasDocumentsVisual Studio 2013ProjectsconPol().cppconPol().cppSource.cpp 36 2 conPol().cpp
7 IntelliSense: no instance of overloaded function "cos" matches the argument list
argument types are: (Coord) c:UsersThomasDocumentsVisual Studio 2013ProjectsconPol().cppconPol().cppSource.cpp 36 12 conPol().cpp
8 IntelliSense: identifier "yval" is undefined c:UsersThomasDocumentsVisual Studio 2013ProjectsconPol().cppconPol().cppSource.cpp 37 2 conPol().cpp
9 IntelliSense: no instance of overloaded function "sin" matches the argument list
argument types are: (Coord) c:UsersThomasDocumentsVisual Studio 2013ProjectsconPol().cppconPol().cppSource.cpp 37 12 conPol().cpp
根据我的理解,我的朋友函数无法从我的类中获得私有变量。此外,我的sin和cos函数不起作用。我已经包含了,所以我不确定为什么它不起作用。至于友元函数不能得到变量,我不知道。
在您的代码中,您正试图完成极坐标到矩形坐标的转换。
既然你已经有了一个构造函数,你甚至不需要一个友元函数。此外,参数的类型应该是float或double,而不是Coord。
因此,函数签名是:
Coord convPol(double r, double theta)
{
double xval = r* cos (theta),
yval = r* sin (theta);
return Coord(xval, yval);
}
这个功能就足以达到你想要达到的目的。
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
。那肯定不是你的意思!
您在文本中提到了几个友元函数:conPol()
和convPol()
,然后在代码中提到了covPol(Coord&, Coord&)
和convPol(Coord &r, Coord &theta)
。我首先要弄清楚你希望你的函数被调用什么。
- 使用递归时获取变量的奇怪值
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 使用基地址和偏移量获取变量的地址
- 如何在C++中从标准输入中获取变量输入
- 如何在每次迭代后在循环中获取变量的值?
- 声明后如何获取变量及其大小?
- C++日历(无法获取变量的值以返回到主函数)
- 我如何实现从其基类获取变量的构造函数
- 从派生类 c++ 中获取变量
- 如何在不使用返回的情况下从函数获取变量的地址(指针)
- 获取变量类型名称
- ClangTool 如何获取变量声明中模板参数的位置?
- 您什么时候使用哪种方法从另一个文件中获取变量
- 如何通过C FFI从Prolog中获取C 变量
- C++从 PHP 获取变量
- 获取变量的中间范围值
- 组合构造函数从成员变量中获取变量
- c++通过调用system()来获取变量集
- 如何从模板g++中获取变量名
- 如何获取 C/C++ 变量的属性