2011-08-11 11 views
8

Nie rozumiem jeszcze dobrze wskaźników i referencji, ale mam klasę ze statycznymi metodami i zmiennymi, które będą odwoływać się do klas głównych i innych. Mam zmienną zdefiniowaną w funkcji main(), którą chcę przekazać do zmiennej w tej klasie z funkcjami statycznymi. Chcę, aby te funkcje zmieniły wartość zmiennej widocznej w zakresie głównym().Klasa C++ ze statycznym wskaźnikiem

To jest przykład tego, co usiłuję zrobić, ale otrzymuję błędy kompilatora ...

class foo 
{ 
    public: 

    static int *myPtr; 

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

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

    return 0; 
} 
+11

Z reguły za każdym razem, gdy pojawiają się błędy kompilatora, _always_ uwzględnij je w pytaniu. –

Odpowiedz

15

podać definicję zmiennej statycznej poza klasy jako:

//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 

Poza tym, zapomniałeś również średnika wskazanego w powyższym komentarzu, a somefunction musi zwrócić wartość bool.

+0

'foo :: somfunction' również musi zwrócić wartość – Praetorian

+0

Pojawia się następujący błąd: nieprawidłowe użycie kwalifikowanej nazwy 'foo :: myPtr' – Brian

+0

@Brian: Zrób jak powiedziałem. Nie dostaniesz wtedy żadnego błędu. – 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

Chociaż ten kod może odpowiedzieć na pytanie, podanie dodatkowego kontekstu dotyczącego tego, w jaki sposób i/lub dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi. Przeczytaj ten [jak-odpowiedź] (http://stackoverflow.com/help/how-to-answer) w celu uzyskania wysokiej jakości odpowiedzi. – thewaywewere

Powiązane problemy