2008-12-06 10 views

Respuesta

19

Trate

(*foo)->member = 1; 

Es necesario utilizar explícitamente la * primera. De lo contrario, es un intento de desreferencia miembro.

+0

Un ejemplo de duda: si la función changeMember() se crea en una biblioteca de clases y necesito acceder a esto en mi aplicación de consola, ¿cómo se debe hacer? : @Jonathan Leffler – TechBrkTru

+0

@TechBrkTru: dado que esto es C, no estoy seguro de lo que quiere decir con una 'biblioteca de clases'. Sin embargo, si te refieres a 'biblioteca', entonces simplemente asegúrate de tener un encabezado con las declaraciones de función necesarias en uso en el código que necesita llamar a 'changeMember()', y vincula el ejecutable con la biblioteca que contiene la función. Eso es completamente rutinario. Si te refieres a algo más, probablemente deberías hacer tu propia pregunta para que puedas explicarla correctamente. –

+0

@JaredPar ¿Por qué necesitaríamos un puntero para estructurar el puntero para poder cambiar el miembro de la estructura (no es un puntero lo suficiente para hacer eso?) – Bionix1441

1

quizá (* foo) -> miembro = 1 (si se asigna de forma dinámica)

+0

No hay tal vez, pero la asignación dinámica es irrelevante. –

7

Debido a la precedencia de los operadores, es necesario poner paréntesis alrededor de esto:

(*foo)->member = 1; 
3

Usted puede utilizar una variable temporal para mejorar la legibilidad. Por ejemplo:

Ttype *temp = *foo; 
temp->member = 1; 

Si usted tiene el control de este y permitió el uso de C++, la mejor manera es utilizar como referencia. Por ejemplo:

void changeMember(Ttype *&foo) { 
    foo->member = 1; 
} 
Cuestiones relacionadas