[C con Clase] struct como atributo de una clase

srd4121 en njit.edu srd4121 en njit.edu
Dom Dic 21 13:18:30 CET 2008


Hola Nuria,

Mensaje citado por: Núria Busom Figueres <meteorit666 en hotmail.com>:

> 
> Hola otra vez a todos, sigo con mis problemas!!! Os cuento: (trabajo en
> C++, pero ya lo habreis notado por el asunto del email, no???)
> 
> 1) tengo un programa principal por el que me entran num_prod mediante
> int main(int argc, char* argv[])
> 
> 2) Estoy creando una clase Gramatica en que los atributos son:
>         char* Sn;
>         char* St;
>         Produccion* P;
>         char S;
> y en que produccion es un struct del tipo:
>     struct Producciones {
>         char* parteIzq;
>         MyString* parteDcha;
>     };
>     typedef struct Produciones Produccion;
> 

Esto no es necesario en C++, porque no hace falta indicar 'struct' cuando nos 
referimos a una estructura. En C, sí hacía falta, pero en C++, no.

> El problema viene cuando en la implementación quiero hacer:
>     P = Produccion [num_prod];
> 

Ya has corregido esta parte en otro correo-e, que debería ser:

P = new Produccion[num_prod];

> Podeis decirme que es lo que hago mal?? No lo entiendo, en la
> implementación de una clase yo puedo acceder sus propios atributos, no?

Cierto.

> Y el tamaño a los struct se hace así, no?? Espero que podais ayudarme

No estoy seguro a qué te refieres con esta afirmación. Supongo que te refieres 
a la hora de crear memoria dinámicamente para un array de 'struct' de una 
cantidad indicada por 'num_prod'.

> El compilador dice:
> Gramatica.cpp: In member function ‘void
> Gramatica::introducirProduccion(int)’:
> Gramatica.cpp:40: error: expected primary-expression before ‘[’ token
> make: *** [Gramatica.o] Error 1
> 

Creo que sería mejor darnos algunas sentencias más del código que llevas 
escrito. Sinceramente, este error tiene sentido con la sentencia original que 
nos diste; o sea,

P = Produccion [num_prod];

pero con la correción que hiciste después, este error no debería aparecer.


Espero que esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase