的地址我有以下成員函數:C++:綁定的成員函數
void GClass::InitFunctions()
{ // Initialize arrays of pointers to functions.
ComputeIntLen[0] = &ComputeILS;
ComputeIntLen[1] = &ComputeILE;
ComputeIntLen[2] = &ComputeILI;
PostStep[0] = &PSS;
PostStep[1] = &PSE;
PostStep[2] = Ψ
gRotation = new Rotation();
}
GClass顯然包含了所有相關成員 - :
void ComputeILE(Int_t, Int_t *, Double_t *);
void ComputeILI(Int_t, Int_t *, Double_t *);
void PSS(Int_t , Int_t *, Int_t &, Int_t*);
void PSE(Int_t, Int_t *, Int_t &, Int_t*);
void PSI(Int_t , Int_t *, Int_t &, Int_t*);
ComputeIntLenFunc ComputeIntLen[gNproc];
PostStepFunc PostStep[gNproc];
... //other members
}
其中gNproc是一個全球性的const int的和ComputeIntLenFunc和PostStepFunc是類型定義是這樣的:
typedef void (*ComputeIntLenFunc)(Int_t ntracks, Int_t *trackin, Double_t *lengths);
typedef void (*PostStepFunc)(Int_t ntracks, Int_t *trackin, Int_t &nout, Int_t* trackout);
當我編譯此,我得到的gcc給出了一個錯誤:「ISO C++禁止採用非限定或帶括號的非靜態成員函數的地址來形成指向成員函數的指針。說 '& GClass :: ComputeIntLenScattering' 「
當我通過GClass :: FunctionNames在InitFunctions取代FunctionNames()我得到 」 不能將 '無效(GClass :: *)(Int_t,Int_t *,* DOUBLE_T)'爲「無效(*)(Int_t,Int_t *,DOUBLE_T *)」在分配」
請幫助我。什麼C的話題++是這樣嗎?
OT:GClass是一類有趣的名字。如果你閱讀你的代碼,例如'GClass的東西;',這是否意味着'某物'是一個班級?也許'GObject'會稍好一些(雖然仍然非常通用)。 – Andre