Punteros estaticos , Existen ¿?

Iniciado por skorpion32, 4 Agosto 2011, 10:34 AM

0 Miembros y 3 Visitantes están viendo este tema.

skorpion32

Hola , al intentar solucionar un problema de un puntero que uso con muchos objetos, lo puse estatico pero el compilador no me deja siquiera definirlo .

Sera que el operador static no puede ser aplicado a un puntero ?¿

EDIT: Me autorespondo . Ya encontré como solucionarlo , era algo muy simple....

si tenia un miembro estatico como puntero ej
Código (cpp) [Seleccionar]
class punt
 {
     public:
         static int *a;
 };

// la forma de definirlo era asi
int *punt::a = NULL;

// Y no
int punt::*a;  // Como estaba intentando  :¬¬


;D


naderST

En realidad es sin el asterisco (*)...

Código (cpp) [Seleccionar]

int punt::a = NULL;


Ahí asignas que el puntero es NULL osea que no apunta a nada, en tu caso estabas asignando que el valor de la dirección donde apunta es NULL.

skorpion32

#2
Sii , pero si no le coloco el * en la definicion el compilador me manda al africa  :silbar:

Solo así compila bien  :-\

Código (cpp) [Seleccionar]

int *punt::a = NULL;


¿Como es a la final?  :huh:

naderST

Al parecer solo puedes acceder a punteros de manera privada en las clases de esta manera:

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

class punt {
    private:
    int * ptr;

    public:
    void numero(int * num){
        ptr = num;
    }

    int obtNumero(){
        return *ptr;
    }
};

int main()
{
    int num = 10;
    punt a;
    a.numero(&num);
    cout << "Contenido del puntero: " << a.obtNumero() << endl;
    return 0;
}



Tienes que crear el objeto y demás.

Karman

#4
Cita de: naderST en  5 Agosto 2011, 07:09 AMEn realidad es sin el asterisco (*)...

Código (cpp) [Seleccionar]

int punt::a = NULL;


Ahí asignas que el puntero es NULL osea que no apunta a nada, en tu caso estabas asignando que el valor de la dirección donde apunta es NULL.

antes de tratar "enseñar" a los demás deberías leer un poco  :silbar:

Cita de: skorpion32 en  4 Agosto 2011, 10:34 AMHola , al intentar solucionar un problema de un puntero que uso con muchos objetos, lo puse estatico pero el compilador no me deja siquiera definirlo .

Sera que el operador static no puede ser aplicado a un puntero ?¿

EDIT: Me autorespondo . Ya encontré como solucionarlo , era algo muy simple....

si tenia un miembro estatico como puntero ej
Código (cpp) [Seleccionar]
class punt
 {
     public:
         static int *a;
 };

// la forma de definirlo era asi
int *punt::a = NULL;

// Y no
int punt::*a;  // Como estaba intentando  :¬¬


;D

La sintaxis de los miembros estáticos es: "<type> <class_name>::<static_variable>;" o "<type> <class_name>::<static_variable> = <value>;" si quieres darle un valor inicial, por lo tanto en tu caso quedaría:

Código (cpp) [Seleccionar]
int* punt::a;

o

Código (cpp) [Seleccionar]
int* punt::a=NULL;

S2

EDIT: con respecto al acceso, sigue las mismas reglas que los miembros no estáticos (solo para miembros, no para métodos estáticos)

skorpion32


BlackZeroX

Cita de: naderST en  7 Agosto 2011, 07:29 AM
Al parecer solo puedes acceder a punteros de manera privada en las clases de esta manera:

Existen tambien los procesos friend...

Temibles Lunas!¡.
The Dark Shadow is my passion.