2010-11-20 20 views
2

Ben şu sınıf var fonksiyon için:C++ işaretçi, beyan

1] statik sınıf üye fonksiyonu

göre
Process.h 

class Process 
{ 
    private: 
     static double (Point2D :: *getCoord)() const; //How to initialize in Process.cpp? 
     ... 
}; 

2] non sınıf üyesi fonksiyonu

Process.h 

double (Point2D :: *getCoord)() const; //Linker error, how do declare? 

class Process 
{ 
    private: 
     ... 
}; 

cevap

1

bu typedef kullanmak en iyisidir:

typedef double (Point2D::*Point2DMemFn)() const; 

class Process 
{ 
     static Point2DMemFn getCoord; 
     ... 
}; 

başlatılması:

Process::getCoord = &Point2D::getX; 
+0

' Süreç :: getCoord = & Point2D :: GetX:

double (Point2D::* Process::getCoord)() const; 

Sen bir başlatıcı sağlayabilir İfade, sahip olduğunuz yerde geçerli değil. Bir tanım olması gerekiyordu? –

+0

Soru, işaretçi GetCoord'un nasıl bildirileceği/başlatılacağıydı. İlk olarak nasıl beyan edeceğimi ve sonra nasıl başlatacağımı yazdım. – Dialecticus

+0

Bildirimi değiştirdiniz, ancak bir tanım görmüyorum (bu sorunun nedeni sorunun kaynağı sorununun büyük olasılıkla nedeni idi) veya bir başlatma (atama, başlatma ile aynı değil), belki de Göstermeye çalıştığın şeyi anlamadın mı? –

2

tek şey, y yapmadıysanız, işlevin adını üye olduğu sınıf adıyla nitelendirmek. Process::getCoord tanımını sağlamak yerine, getCoord adlı küresel bir işaretçi-üyesi bildirdiniz. Hiçbir tür olmadığı için, bu sadece bir görev `geçerli bir tanım (veya beyanı) değildir;

double (Point2D::* Process::getCoord)() const = &Point2D::getX; 
+0

Teşekkürler, tersine yazdım: double (Süreç: : Point2D :: * getCoord)() const = & Point2D :: getX; – Ian