【发布时间】:2012-01-23 08:57:45
【问题描述】:
我从一本 c++ 练习书中复制了这个程序。幕后发生了什么?
预期的输出是:
sum=30 sum=70
#include<iostream>
using namespace std;
class M
{
int x;
int y;
public:
void set_xy(int a, int b)
{
x=a;
y=b;
}
friend int sum(M m);
};
int sum (M m);
//so far so good, problem begins from here. what's happening after here?
{
int M ::*px = &M ::x;
int M ::*py = &M ::y;
M *pm =&m;
int s= m.*px+ pm->*py;
return s;
}
int main()
{
M n;
void (M :: *pf)(int, int) = &M ::set_xy;
(n.*pf)(10, 20);
cout <<"sum=" << sum(n) << endl;
M *op= &n;
(op-> *pf)(30,40);
cout << "sum=" << sum(n)<< endl;
cin.ignore();
getchar();
return 0;
}
【问题讨论】:
-
"->*" 是一个运算符,而不是两个。所以他们不能分开。你不能写“-> *”。
-
这个问题解决了。有人可以解释一下它的工作原理吗?
-
移除标签“visual-studio”,因为这不是编译器特有的问题
-
cin.ignore();获取字符();是 Visual Studio 的命令。
-
@jeet.mg,是的命令是针对VS的,但不是编译器错误问题
标签: c++ pointers compiler-errors dereference pointer-to-member