我试图加入一个旧的代码在C我现在的VC++项目:错误C2664和MyClass的冲突
// .h
class DMSinv : public CDialog {
double finte(double z);
double ITFStolz(double Zp1, double Zp2, double Zc);
};
// .cpp
double Zcglob;
double DMSinv::finte(double z)
{
return TFStolz(z, Zcglob);
}
double DMSinv::ITFStolz(double Zp1, double Zp2, double Zc)
{
int ierr;
Zcglob = Zc;
return (coteglob(&DMSinv::finte, Zp1, Zp2, 1.0e-10, &ierr));
//error C2664: 'DMSinv::coteglob' : cannot convert parameter 1 from 'double (__thiscall DMSinv::*)(double)' to 'double (__cdecl *)(double)'
}
的coteglob功能来自于旧的C部分,finte是将TFStolz函数传递给coteglob的中间函数。
我搜索的论坛,发现此相关的问题: How to convert void (__thiscall MyClass::*)(void *) to void (__cdecl *)(void *) pointer ,我试图以这种方式适用于:
// .h
class DMSinv : public CDialog {
virtual double finte(double z);
double ITFStolz(double Zp1, double Zp2, double Zc);
};
// .cpp
double Zcglob;
extern "C"
{
static double __cdecl finteHelper(double z)
{
DMSinv* datainv = reinterpret_cast<DMSinv> (z); //error C2440: 'reinterpret_cast' : cannot convert from 'double' to 'DMSinv'
datainv->finte(z);
}
}
double DMSinv::ITFStolz(double Zp1, double Zp2, double Zc)
{
int ierr;
Zcglob = Zc;
double solution = coteglob(&finteHelper, Zp1, Zp2, 1.0e-10, &ierr);
return solution;
}
,但仍然没有工作。有人可以指导我如何适应它吗?我还是一个新手,这似乎离我的知识还很遥远。
在此先感谢!
'DMSinv * datainv = reinterpret_cast < DMSinv >(z)' - 不应该转换为'DMSinv *'吗? – SomeWittyUsername 2013-03-27 11:56:10
我试过了,但是这给了我同样的错误:'错误C2440:'reinterpret_cast':无法从'double'转换为'DMSinv *'' – madoro 2013-03-27 11:58:14