2011-10-02 38 views
1

在下面的代碼我收到錯誤:數組指針的成員函數:使其工作

a value of type (double*)(const double& arg) const cannot be assigned to an entity of type pt2calculateA

如何使工作有什麼建議?

class myClass { 
    private: 

    typedef double (*pt2calculateA)(double); 

    pt2calculateA calculateA[2]; 

public: 

    myClass() { 
     calculateA[0] = &calculateA1; //->error 
     calculateA[1] = &calculateA2; //->error 
    } 

    double calculateA1(const double& arg) const { 
      ... 
    } 

    double calculateA2(const double& arg) const { 
     ... 
    } 
} 

回答

7

myClass::calculateA1()不是函數;相反,它是一個成員函數。所以這些類型自然不兼容。

&myClass::calculcateA1的類型是double (myClass::*)(const double &) const,它是一個指向成員函數(PTFM)的指針。請注意,您只能使用PTMF和指向對象實例的指針(即myClass*)。

如果你改變你的typedef,你至少可以正確地存儲指針:

typedef double (myClass::*pt2calculateA)(const double &) const; 

你不得不說&myClass::calculateA1等,採取的地址。

在C++ 11,可以初始化在初始化列表中的陣列:

myClass() : calculateA{&myClass::calculateA1, &myClass::calculateA2} { } 
+0

的伎倆感謝那確實! – niels

0

不僅typedef和實際函數的參數類型不同,還有一個是函數指針,另一個是成員函數指針。 myClass::calculateA1有型號double (myClass::*)(const double& arg) const

0

pt2calculateA被聲明爲指針到功能,而不是一個指針到成員函數。

看到here

1

試試這個:

class myClass { 
    private: 

    typedef double (myClass::*pt2calculateA)(const double&) const; 

    pt2calculateA calculateA[2]; 

public: 

    myClass() { 
     calculateA[0] = &myClass::calculateA1; 
     calculateA[1] = &myClass::calculateA2; 
    } 

    double calculateA1(const double& arg) const { 
     // ... 
    } 

    double calculateA2(const double& arg) const { 
     // ... 
    } 
};