我試圖加入一箇舊的代碼在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