turco
20/01/2010, 19:47
Hola a todos.
¿Que estoy haciendo mal en esta función? :loco:
typedef struct {
void* hScroll;
void* vScroll;
void* viewPort;
} MG_ScrollPane;
void* MG_GetScrollPaneComponents(MG_ScrollPane* scrollPane) {
MG_Component* comps = (MG_Component*) calloc( 3, sizeof(MG_Component) );
comps[0] = (MG_Component*) scrollPane->hScroll; // linea 399
comps[1] = (MG_Component*) scrollPane->vScroll; // linea 400
comps[2] = (MG_Component*) scrollPane->viewPort; // linea 401
return comps;
}
Todos los miembros de la structura MG_ScrollPane son punteros a MG_Component, pero tengo que declararlos como void* porque tengo referencias cruzadas.
Al compilar me lanza el error:
MG_ScrollPane.c:399: error: tipos incompatibles en la asignación
MG_ScrollPane.c:400: error: tipos incompatibles en la asignación
MG_ScrollPane.c:401: error: tipos incompatibles en la asignación
Gracias de antemano.
Un saludo.
<--->
Creo que lo he solucionado con esto. Aun no lo he probado pero al menos no me da error al compilar.
void* MG_GetScrollPaneComponents(MG_ScrollPane* scrollPane) {
MG_Component* comps = (MG_Component*) calloc( 3, sizeof(MG_Component) );
MG_Component* tempPointer = comps;
tempPointer = (MG_Component*) scrollPane->hScroll;
tempPointer++;
tempPointer = (MG_Component*) scrollPane->vScroll;
tempPointer++;
tempPointer = (MG_Component*) scrollPane->viewPort;
return comps;
}
He visto que el problema era que al acceder por un índice como si se tratase de un vector, no se accede a una dirección sino a su contenido. Espero que esto me sirva :D
¿Que estoy haciendo mal en esta función? :loco:
typedef struct {
void* hScroll;
void* vScroll;
void* viewPort;
} MG_ScrollPane;
void* MG_GetScrollPaneComponents(MG_ScrollPane* scrollPane) {
MG_Component* comps = (MG_Component*) calloc( 3, sizeof(MG_Component) );
comps[0] = (MG_Component*) scrollPane->hScroll; // linea 399
comps[1] = (MG_Component*) scrollPane->vScroll; // linea 400
comps[2] = (MG_Component*) scrollPane->viewPort; // linea 401
return comps;
}
Todos los miembros de la structura MG_ScrollPane son punteros a MG_Component, pero tengo que declararlos como void* porque tengo referencias cruzadas.
Al compilar me lanza el error:
MG_ScrollPane.c:399: error: tipos incompatibles en la asignación
MG_ScrollPane.c:400: error: tipos incompatibles en la asignación
MG_ScrollPane.c:401: error: tipos incompatibles en la asignación
Gracias de antemano.
Un saludo.
<--->
Creo que lo he solucionado con esto. Aun no lo he probado pero al menos no me da error al compilar.
void* MG_GetScrollPaneComponents(MG_ScrollPane* scrollPane) {
MG_Component* comps = (MG_Component*) calloc( 3, sizeof(MG_Component) );
MG_Component* tempPointer = comps;
tempPointer = (MG_Component*) scrollPane->hScroll;
tempPointer++;
tempPointer = (MG_Component*) scrollPane->vScroll;
tempPointer++;
tempPointer = (MG_Component*) scrollPane->viewPort;
return comps;
}
He visto que el problema era que al acceder por un índice como si se tratase de un vector, no se accede a una dirección sino a su contenido. Espero que esto me sirva :D