2011-08-11 32 views
8

İşaretçileri ve başvuruları henüz çok iyi anlamıyorum, ancak ana ve diğer sınıflardan başvurulan statik yöntemler ve değişkenler içeren bir sınıfa sahibim. Bu sınıftaki bir değişkene statik işlevlerle geçmek istediğim main() öğesinde tanımlanmış bir değişkenim var. Bu işlevlerin main() kapsamındaki değişkenin değerini değiştirmesini istiyorum.C++ sınıfı statik işaretçi

//foo.h 
class foo 
{ 
    public: 

    static int *myPtr; //its just a declaration, not a definition! 

    bool somfunction() { 
     *myPtr = 1; 
     //where is return statement? 
    } 
}; //<------------- you also forgot the semicolon 


///////////////////////////////////////////////////////////////// 
//foo.cpp 
#include "foo.h" //must include this! 

int *foo::myPtr; //its a definition 

:

Bu yapmak ne çalışıyorum bir örnektir, ama derleyici hataları olsun ...

class foo 
{ 
    public: 

    static int *myPtr; 

    bool somfunction() { 
     *myPtr = 1; 
     return true; 
    } 
}; 

int main() 
{ 
    int flag = 0; 
    foo::myPtr = &flag; 

    return 0; 
} 
+11

Kural olarak, derleyici hataları aldığınızda, _always_ bunları soruya ekleyin. –

cevap

15

olarak sınıfının dışında statik değişkenin tanımı sağlayın Bunun yanı sıra, yukarıdaki yorumda belirtildiği gibi noktalı virgülü de unuttuysanız ve somefunction, bool değerini döndürmelidir.

+0

'foo :: somfunction' ayrıca bir değer döndürmek zorunda: – Praetorian

+0

Aşağıdaki hatayı alıyorum: adsız adın geçersiz kullanımı 'foo :: myPtr' – Brian

+0

@Brian: Dediğim gibi yap. O zaman bir hata almayacaksın. – Nawaz

0
#include <iostream> 
using namespace std; 

class foo 
{ 
public: 

static int *myPtr; 

bool somfunction() { 
    *myPtr = 1; 
    return true; 
} 
}; 
////////////////////////////////////////////////// 
int* foo::myPtr=new int(5);  //You forgot to initialize a static data member 
////////////////////////////////////////////////// 
int main() 
{ 
int flag = 0; 
foo::myPtr = &flag; 
return 0; 
} 
+0

Bu kod soruyu yanıtlarken, sorunun nasıl ve/veya neden çözüldüğüne ilişkin ek bağlam sağlayarak yanıtın uzun vadeli değerini artıracaktır. Lütfen, kalite cevabı sağlamak için bu [nasıl yapılır] (http://stackoverflow.com/help/how-to-answer) okuyun. – thewaywewere