Visual Basic - Tipos definidos por el usuario en una clase

Life is soft - evento anual de software empresarial
   
Vista:

Tipos definidos por el usuario en una clase

Publicado por Roman (34 intervenciones) el 10/03/2008 15:14:09
Hola, necesito una ayudita con los tipos definidos por el usuario

yo tengo declarada una estructura TYPE en un módulo publico (.bas) y necesito que una función de una clase devuelva este tipo de datos y me devuelve un error
¿cómo debería hacer?

Mas detalladamente, a través de un ejemplo...

En módulo: globales.bas

Public Type Estado
Detener as boolean
Status as integer
End Type

En módulo de clase: clsControl.cls

Public Function Procesar (Pedido as long) as Estado
(...)
Procesar.Detener = true
Procesar.Status = 1
End Function

Según la ayuda de VB esto está correcto pero al presionar F5 me devuelve el siguiente error: "Sólo los tipos definidos por el usuario públicos de módulos de objeto públicos se pueden usar como parámetros, como tipos de retorno para procedimientos públicos de módulos de clase o como campos de TDU públicos"
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Tipos definidos por el usuario en una clase

Publicado por alberto (123 intervenciones) el 10/03/2008 19:01:57
Haz lo que te indica el error declara el tipo en una clase
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por Roman (34 intervenciones) el 10/03/2008 21:22:52
Ante todo te agradezco la ayuda,
exacto, ya lo había intentado pero VB no permite hacer lo que decís, muestra el siguiente error:

"No se puede definir un tipo definido por el usuario público en un módulo de objeto provado"

y según la escasa ayuda que presenta MSDN a respecto, tengo que declarar el tipo en un módulo público estándar (un .bas) y después si puedo utilizarlo en un módulo de clase... pero tampoco funciona


Copio y pego lo que indica la ayuda sobre este error:

---

Un tipo definido por el usuario que aparece dentro de un módulo de objeto no puede ser Public. Las causas y posibles soluciones de este error son las siguientes:

En un formulario, un formulario MDI o un módulo de clase, intentó definir un tipo definido por el usuario Public.
Mueva la definición de tipo definido por el usuario a un módulo estándar, y a continuación declare variables de ese tipo en el módulo de clase o en otros módulos, según lo necesite. Si solamente desea que el tipo esté disponible en el módulo donde aparece, puede incluir su definición Type...End Type dentro del formulario, formulario MDI o módulo de clase deseado colocando delante de su definición lapalabra clave Private

---
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por lolo (22 intervenciones) el 10/03/2008 22:04:16
Primero busca en la ayuda MSDN la diferencia de lo que es un módulo de clase (.cls) y un módulo standar (.bas)

me parece que el que te respondió antes, tiene menos idea que tú

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por Roman (34 intervenciones) el 11/03/2008 03:41:48
Bueno, te agradecería si intentás ayudar lolo. Sino no es necesario que postees, sé muy bien la diferencia entre un módulo y una clase.

Y Alberto estuvo bastante acertado, es lo mismo q intenté yo, ya que así debería ser... según MSDN, que por cierto leí antes de consultar.

Igualmente gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por igor (633 intervenciones) el 17/06/2008 20:59:49
El problema parece estar en la visibilidad del tipo de datos definido por el usuario, el área de código que puede tener acceso al tipo.

Digo yo que se podrá declarar tipos dentro de clases y que sean visibles en el exterior. La solución definir el tipo dentro de la clase y como publico, de manera que podamos utilizarlo fuera.

Esto es algo que cualquiera que sepa lo que es la programación orientada a objetos (usea clases y demás) debería de saber, asi que deberíamos empezar por entender lo que es una clase.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por Roman (34 intervenciones) el 18/06/2008 16:12:57
Te agradezco ante todo tu respuesta igor, entiendo cual es tu punto y coincido, es onbvio que es la visibilidad.
Lo que sugerís no devolvió resultados satisfactorios, solo un error que dice "No se puede definir un tipo definido por el usuario público en un módulo de objeto privado" y si necesitas te paso una captura de pantalla, agradezco tu intento de dictado de cátedra pero te respondo una sola cosa:

antes de enseñar teoría remitite a las pruebas, ante determinadas circunstancias quizás todo difiere y no podes saber todo... o bien no te estas explicando correctamente

Lo que vos decís simplemente no funciona... y no creo que vaya a ganarle por cansancio. Gracias.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por igor (633 intervenciones) el 18/06/2008 23:29:21
Roman, tu palabra es friend.

Friend Function Procesar (Pedido as long) as Estado
(...)
Procesar.Detener = true
Procesar.Status = 1
End Function

Pasate por "http://www.elguille.info/vb/vb6/tiposDefinidos.htm#enClasePrivada" que es donde me he documentado yo. Un sitio estupendo para aprender. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por Roman (34 intervenciones) el 19/06/2008 16:26:54
Bien, agradezco una vez mas la predisposición.

Conocía la web de elguille pero este ejemplo no lo había encontrado, por lo que te agradezco la info.

Observá esta captura, quizás así me entiendas mejor:
http://img179.imageshack.us/img179/5720/capclaseip8.jpg

El ejemplo es exactamente el mismo que muestra Guillermo Som en su web... y devuelve el mismo error que estoy planteando.

El friend es aplicable perfectamente pero no tiene nada que ver con el error que devuelve, aclaro una vez mas: NO ACEPTA LA DEFINICION DEL TIPO DE DATOS.
La utilización del friend sería posteriormente, al utilizar el tipo definido en la clase... pero antes debería lograr que me permita definirlo.

Eso es lo que no entiendo, ¿por que -en teoría- a los demás les funciona así?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por igor (633 intervenciones) el 20/06/2008 19:12:42
Entiendo perfectamente:

El problema es que intentas declarar el tipo en la propia clase, algo que al parecer no se puede.

Según la web debes declarar el tipo en un módulo estandar y luego utilizar el tipo en las funciones de la clase, siempre que declares estas funciones como friend.

A mi no me gusta esta solucion, pero declarar el tipo en una clase parece no estar permitido en VB6 (por lo menos no está documentado).

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por Manuel (1 intervención) el 08/07/2008 11:56:22
Yo tuve el mismo problema que tu, asi que en vez de utilizar una estructura registro (type), directamente utilicé una clase. Así, si funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por Roman (34 intervenciones) el 10/07/2008 01:33:28
Exacto. Algo así es lo que hice yo también.
Realmente una lástima este defecto del lenguaje. Igual muchas gracias a todos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por Jose Venezuela (1 intervención) el 02/10/2008 18:09:52
Hola Roman,

Tu ejemplo creo que debes cambiarlo de la siguiente manera para que funcione

En vez de hacerlo asi:
En módulo: globales.bas

Public Type Estado
Detener as boolean
Status as integer
End Type

En módulo de clase: clsControl.cls

Public Function Procesar (Pedido as long) as Estado
(...)
Procesar.Detener = true
Procesar.Status = 1
End Function

Hazlo asi

En módulo: Estado.cls (La propiedad nombre del modulo debe ser Estado)
Public Detener As Boolean
Public Status As Integer

En cualquier tipo de módulo:
Public Function Procesar (Pedido as long) as Estado
(...)
Procesar.Detener = true
Procesar.Status = 1
End Function

Yo lo probe y me funcionó bien

Saludos,

José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tipos definidos por el usuario en una clase

Publicado por César (1 intervención) el 20/03/2013 22:38:58
Estimados,

holas, primero aclarar que no soy tan docto como uds, ojalá pudan ayudarme...tengo el mismo problema que Roman y la solución de Jose Luis me funciona perfecto salvo que necesito que las variables dentro de esta clase que estoy creando sean vectores, dónde defino esto? ya que si lo hago dentro de la clase me aparece un error:

"No se permiten constantes, cadenas de longitud fija, matrices e instrucciones declare como miembros public de modulos de objetos"


alguien tiene idea de cómo solucionar esto??

ya que necesito una funcion que devuelva la estructura que estoy creando y uno de los campos de la estructura es un vector...

eso, saludos y gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar