首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

编译器异常 C3867

2013-01-12 
编译器错误 C3867这是MSDN给出的产生这个错误的例子// C3867_4.cpp// compile with: /cclass A {public:vo

编译器错误 C3867
这是MSDN给出的产生这个错误的例子

// C3867_4.cpp
// compile with: /c
class A {
public:
   void f(int) {}

   typedef void (A::*TAmtd)(int);

   struct B {
      TAmtd p;
   };

   void g() {
      B b1;
      b1.p = f;   // C3867
   }
};

这是因为用A类的F函数赋值给A::B类的函数
但我的代码

class CheckOnce
{
typedef int (*do_sth)(int,int);

bool IsChecked;
bool CheckPara()
{
cout<<"do check"<<endl;
return IsChecked;
}

do_sth do_compute;
int do_compute_with_check(int a, int b)
{
if (CheckPara())
{
do_compute=simple_do_compute;//C3867
}else
{
throw "no check";
}
return 0;
}
int simple_do_compute(int a, int b)
{
cout<<a<<"+"<<b<<endl;
return a+b;
}
public:
CheckOnce():IsChecked(false), do_compute(do_compute_with_check){}//C3867
void SetCheck(bool bCheck = true)
{
IsChecked = bCheck;
}
int DoCompute(int a, int b)
{
return do_compute(a, b);
}
};


我想做一个计算类,一个计算对象在做计算之前检查一遍参数,检查完了,之后该对象的计算就不再进行检查。
[解决办法]
&CheckOnce::do_compute_with_check
这样试试

如果需要一个函数实现不同的功能,建议用虚函数
[解决办法]
#include <iostream>
using namespace std;

class FunPtrTest
{
typedef void (*funcp)();
public:
void doaaa()
{
cout<<"doaaa\n";
}
void DoSomething()
{
funcp dodo(doaaa);
dodo();
}
};

int main(int argc, char *argv[])
{

return 0;
}

热点排行