指向类成员的引用,编译出错了,帮我看看吧!
在VC下面:
- C/C++ code
#include "stdafx.h"#include<Windows.h>struct A{ typedef void (A::*FUN)(); A( FUN fun ){ m_fun=fun; i=1; } static DWORD WINAPI f2(LPVOID pArg) { A* pA = (A*)pArg; (pA->*m_fun)();//这一行编译不过去。 } void func(){printf("i=%d\n");} FUN m_fun; int i;};int _tmain(int argc, _TCHAR* argv[]){ A a( &A::func); CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)A::f2,(LPVOID)&a,NULL,NULL); Sleep(10);}1>testnew.cpp(13): error C2597: 对非静态成员“A::m_fun”的非法引用
1>testnew.cpp(13): error C3867: “A::m_fun”: 函数调用缺少参数列表;请使用“&A::m_fun”创建指向成员的指针
1>testnew.cpp(13): error C2568: “->*”: 无法解析函数重载
[解决办法]
(pA->*(pA->m_fun))();
[解决办法]
- C/C++ code
(pA->*(pA->m_fun))();
[解决办法]
3楼已经说了啊。静态成员函数是没有this指针的。所以在使用任何数据成员的时候都必须有一个确切的对象或者对象的指针(包括引用)。
[解决办法]
但是关键的是m_fun是作为一个数据成员,而不是一个普通的局部变量或者全局变量啊。
[解决办法]
这里的pf是一个局部变量而不是作为Car里面的一个数据成员。