2016-04-11 64 views
0

aşağıdaki hataNeden belirli bir işleve işaret etmek için bir işlev işaretçisi değişkeni atayamıyorum. Hata

"incompatibale türünden 'Adakçı (Adakçı :: *) (Adakçı, Adakçı)' 'Adakçı (Adakçı, Adakçı)' olarak atama" var altındadır benim TreeLeaf.h olarak

ben aşağıdaki kodu var benim TreeLeaf.cpp aşağıdaki kodu

class TreeLeaf 
{ 
    public: 
    void checkVaribleValue(string command); 
    int number; 
    bool isOperator = false; 

    TreeLeaf (TreeLeaf::*operation)(TreeLeaf var1, TreeLeaf var2); 


    static TreeLeaf add(TreeLeaf var1, TreeLeaf var2); 
}; 

sahip

#include "TreeLeaf.h" 


void TreeLeaf::checkVaribleValue(string command) 
{ 
    if(isdigit(command[0]) || (command[0] == '-' && isdigit(command[1]))) 
    { 
     number = stoi(command); 
    } 
    else 
    { 
     switch(command[0]) 
     { 
      case '+': 
       isOperator = true;// will used to know that that it operates on other leafs. 
       operation = add; 
       break; 
     } 
    } 
} 

TreeLeaf TreeLeaf::add(TreeLeaf var1, TreeLeaf var2) 
{ 
    //TODO check type for now just working with ints 
    TreeLeaf result; 

    result.number = var1.number + var2.number; 
    return result; 
} 

Ekleme işlemi yapmaya çalıştığımda (operation = add;) hatayı alıyorum.

XCode 7.3 kullanıyorum.

+0

dönüş değeri bir sınıftır, çünkü bu soru farklıdır olurdu. Sorunun bir sebebi olup olmadığından emin değildim. Diğer soru ise void dönüş türüyle ilgiliydi. –

+0

@ πάντα conf Burada karışıklık olarak yeniden oylama yapmak, bir statik sınıf üyesi işlevinin bir üye işlevle aynı olmamasıdır. Duba buna değmez. – NathanOliver

cevap

3

Statik üye işlevi, üye işleviyle aynı değildir. Bir üye işlevinin, bir statik üye işlevinin, bir statik üye işlevinin, genel bir işlev gibi olmadığı bir sınıfın bir örneğine ihtiyacı vardır, ancak adı, sınıfa kapsamlıdır. Eğer add için bir işaretçi saklamak istiyorsanız o zaman

TreeLeaf (*operation)(TreeLeaf,TreeLeaf); 

olurdu ve daha sonra

operation = add; 

operation = &TreeLeaf::add; 
+0

Bu hatayı ortadan kaldırdı! Şimdi hasta kullanabiliyor gibi görünüyor, teşekkürler! Bir şey ortaya çıkarsa, daha sonra yorum yaparım. Yardımını çok takdir ediyorum! –