Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Poder: 18
Guillermo80 Va por buen camino
struct "a pelo"

Hola, no hay día que pase sin que me encuentre con cosas cada vez más extrañas (para mí). Se trata de lo siguiente:

Cita:
struct FLAC__StreamEncoderProtected;
struct FLAC__StreamEncoderPrivate;

typedef struct {
struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
} FLAC__StreamEncoder
1) ¿Qué clase de uso es ese de struct, para las dos primeras líneas?

2) ¿Por qué me hace la advertencia de evitar el uso del keyword C++?¿qué leches es eso ?

3) ¿Me está diciendo algo especial protected y private?
Responder Con Cita
  #2  
Antiguo 03-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Dios santo, lo que hay que ver. En serio que no tengo ni idea de para qué puede servir eso .

Las dos primeras líneas son "declaraciones por adelantado" (forward declaration) ya que se van a usar el tipo de dato en la definicion del propio tipo de dato.

Con clases quizás se vea más claro:
Código Delphi [-]

type  A; // fordward declaration, le decimos al compilador que A es un tipo de datos.

type  A = class(TObject)
public
   Subclase : A;
end;
Si omitimos la declaración por adelantado, el compilador se quejará en la línea:
Subclase : A
porque no se ha terminado de definir el tipo de datos "A" y ya se está haciendo uso de él.

La advertencia sobre "protected" keyword, es que quiere declarar uno de los campos con el nombre "protected" pero eso no está permitido porque es una palabra reservada del propio lenguaje C++, la solución pasa por añadir un guión bajo, de esa forma C++ no lo reconoce como una palabra reservada y puede compilarse.

poquito enrevesado ¿qué no?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 03-03-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Poder: 18
Guillermo80 Va por buen camino
avanzamos

Gracias Lepe, ha estado bien la explicación, y me sirve. Lo de protected y private te iba a decir que en Delphi son palabras reservadas, pero aquí pues no estaba seguro, y el guion bajo pues como que me despistó un poco. Por otra parte, lo curioso de todo esto es que me he encontrado con una contradicción de lo más pura:

1) Si se hace una "declaración por adelantado" significaría que no necesitaría ser definido en otro sitio, sin embargo , para FLAC__StreamEncoderProtected sí que tengo en otro sitio la definición de ese registro.

2) Si entonces debería existir ambas declaraciones de registros por otra parte, así como la he encontrado para FLAC__StreamEncoderProtected, la debería encontrar para FLAC__StreamEncoderPrivate, ¿no? Si la respuesta es que "es que esto es privado y no lo ves", necesito que me argumenten un poco de qué va la película.
Responder Con Cita
  #4  
Antiguo 04-03-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Las declaraciones por adelantado le dicen al compilador, "no te preocupes, mas adelante te diré lo que es, por ahora trabaja con esto y no lo consideres un error". Claro que debe estar declarado mas adelante, o de lo contrario el compilador dará el consiguiente error de compilación.

Si no has encontrado una declaración, no significa que no esté. Probablemente la encuentres en otro archivo cabecera. Private no significa que no la ves, sino que no se puede acceder a esos miembros (privados) desde fuera de la clase y, además, que si derivas una clase o estructura, ésta estructura derivada no ve los miembros privados de la clase madre. En todo momento las declaraciones deben existir.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comentario "aplastante" contra los que atacan la "piratería" Casimiro Notevi La Taberna 12 07-03-2010 14:03:02
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 04:21:16


La franja horaria es GMT +2. Ahora son las 16:00:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi