elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33
271  Programación / Programación C/C++ / Re: Mi programa no compila. me da un error de, undefined reference to dados, AYUDAAA en: 4 Noviembre 2017, 17:58 pm
que tal si cierras la llave despues de return 0; y antes de int dados() ?
272  Programación / Programación C/C++ / Re: ¿Cómo hago para crear una funcion que al usarla cree otra?. en: 4 Noviembre 2017, 16:16 pm
No dije que no se pueden usar parámetros.
Dije que no se pueden usar variables como parámetros de la especialización.

Vale decir, no puedes usar

mifunc<i>()

Solo puedes usar constantes, como en el ejemplo que mande

Yo no tengo a la vista el xorstr que mencionas.
273  Programación / Programación C/C++ / Re: ¿Cómo hago para crear una funcion que al usarla cree otra?. en: 4 Noviembre 2017, 10:56 am
Se me ocurre una manera de hacerlo, pero no es tan directo como llegar e invocar una funcion. En C++, los templates generan codigo y cada especializacion es codigo distinto.
De esta manera, basta que uses una especializacion cada vez que invocas la funcion.

Ejemplo:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <int N> void myfunc1() {  cout << N << endl; }
  5.  
  6. template <int N> void myfunc2() {  cout << "No me importa el valor de N" << endl;  }
  7.  
  8. int main()
  9. {
  10.    // Invocar una funcion a la que le interesa usar el valor explicito
  11.    // todas las funciones son distintas
  12.    myfunc1<1>();
  13.    myfunc1<456>();
  14.  
  15.    // Invocar una funcion en que el parametro del template se ignora
  16.    myfunc2<1234>();
  17.  
  18.    return 0;
  19. }
  20.  

Puedes ver este codigo ejecutandose en este link:  http://goo.gl/x3aJ9X

No puedes usar variables como parametro de la especializacion. Solo constantes explicitas.

274  Programación / Programación C/C++ / Re: Ayuda con esto. en: 3 Noviembre 2017, 04:12 am
Creo que el problema que tienes esta en los tipos de datos que usas.

En C hay clausura de tipos.
Si operas 2 tipos int, el resultado es int.

por ejemplo, 5 /3 es 1, no es 1.66666
otro ejemplo  2/4 es 0, no es 0.5

puedes forzar que se operen numeros float a pesar de tener int haciendo un cast hacia ese tipo asi:

(float) 2 / (float) 4

Existe otra regla respecto a operar tipos distinto, no es exactamente asi, pero para entenderlo, el tipo mas chico se convierte en el tipo mas grande

float operado con int, el compilador hace el cast por ti, entonces

(float) 2 / (float) 4 es igual a  (float) 2 / 4 y es igual a 2 / (float) 4.

reemplaza 2 y 4 por variables de tipo int y tendras algo mas generico.
275  Programación / Programación C/C++ / Re: Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc en: 1 Noviembre 2017, 04:33 am
malloc(sizeof(strlen(x)))

No tiene sentido.

Usa

malloc(1+strlen(x))

Que pide memoria por el tamaño en bytes del string x


Otra cosa que note, pero que no es un problema, realmente, aunque es bueno saberlo es que sizeof(char) es siempre 1, no es necesario incluirlo.

276  Programación / Programación C/C++ / Re: por que en algunos archivos de encabezados crean clases imcompletas en: 1 Noviembre 2017, 04:25 am
La compilacion no es barata.
Toma tiempo y recursos,
Si la clase tiene varios campos, el compilador tiene q chequear todo otra vez.
Más económico en tiempo y recursos, si solo usas un puntero a la clase, declararlo así
277  Programación / Programación C/C++ / Re: Ayuda c++ en: 30 Octubre 2017, 23:59 pm
Una clase se puede declarar o definir o ambas.
Si solo pones el nombre sin especificar como esta definida, se trata de la declaracion.
Solo requieres un nombre, en ese momento. En alguna parte de tu programa tiene que estar esa variable definida, sino el programa no va a linkear.

Solo es posible definir punteros a los tipos declarados. Esto es posible, pues al compilador solo le interesa conocer el tamano de los datos y el tamano de los punteros no depende de los datos apuntados, es constante.

Si modificaras el programa y removieras el * y en vez de puntero fuera un campo de ese tipo, el compilador no va a aceptar la declaracion pues no tiene manera de calcular el tamano.
278  Programación / Programación C/C++ / Re: Error en programa de C en: 29 Octubre 2017, 05:08 am
Las direcciones de memoria son del mismo tamano, no importa a que dato apunten.
Lo malo es que los datos si tienen tipo.
3 soluciones posibles.

Solucion 1:
Haz 2 funciones, una que lee un int, otra que lee float y RETORNA el valor leido

luego en tu programa haces

Código
  1. mivariable = funcionqueleeint();

y la funcionqueleeint() hace de todo, lee, chequea, itera, y devuelve el dato listo.
Haz lo mismo con otra funcion que lee float.

Solucion 2a:
Te gusta, quieres aprender o necesitas usar punteros.
Define 2 funciones, 1 que lee floats, otra que lee int. Hace lo mismo que lo anterior, pero en vez de retornar los valores, los asigna a la variable que se pasa como parametro.

Invocalas de manera separada de acuerdo al tipo de dato que quieres leer.

Quieres leer un int ?

Código
  1. void mifuncionlectoraparaint( int * punteroaint)  {
  2.  printf("Ingrese int" );
  3.  scanf("%d", punteroaint);
  4.  int valoringresado = *punteroaint;
  5.  
  6.  // mas logica usando el valor ingresado, que se obtiene usando valoringresado
  7. }

se usa desde otro lados, al estilo scanf

Código
  1. ...
  2. mifuncionlectoraparaint( & mivariableint )

Lo mismo con float

Solucion 2b.
Alternativa: Usas una variable local a la funcion para leer y solo asignas al final:

Código
  1. void mifuncionlectoraparaint( int * punteroaint)  {
  2.  int variablelocal;
  3.  printf("Ingrese int" );
  4.  scanf("%d", &variablelocal);
  5.  
  6.  // agregar logica aqui que use la variable local
  7.  
  8. ...
  9.  
  10.  // y al final
  11.  *punteroaint = variablelocal;
  12. }

Solucion 3a:
1 sola funcion que lee ints y floats

Código
  1. void mifuncionlectoraparatodos( void * punteroadato, int esEntero)  {
  2.  if( esEntero == 1 ) {
  3.     printf("Ingrese int" );
  4.     scanf("%d", (int *) punteroadato);
  5.     int valoringresado =*(int *) punteroadato;
  6.     // logica especifica para int, usando valoringresado
  7.  } else {
  8.     printf("Ingrese float" );
  9.     scanf("%f", (float *) punteroadato);
  10.     float valoringresado = *(float *) punteroadato;
  11.     // logica especifica para float, usando valoringresado
  12.  }
  13. }

Se invoca de todos lados indicando si lo que se quiere leer es int o no, mas la direccion de memoria

Solucion 3b.
Lo mismo anterior, pero usar una variable local, y solo asignar al final, parecido a la solucion 2b.

279  Programación / Programación C/C++ / Re: Error en programa de C en: 29 Octubre 2017, 03:41 am
que tipo de dato es precUni ?
que tipo de dato es el primer parametro de tu funcion restriccion?
Calzan?

En C existe el paso por valor, en C++ existe el paso por referencia. Por lo que veo estas usando paso por valor, y luego en tu funcion restriccion usas la direccion de memoria de la copia que esta siendo creada, no la direccion de memoria de la variable original, no hay manera que la variable original cambie:

- haz que los tipo de los datos que pasas calcen
- pasa direcciones de memoria a las funciones si quieres que las funciones cambien los datos, al estilo de la funcion scanf.

280  Programación / Programación C/C++ / Re: Problemas de perdida de memoria con memoria dinamica en: 28 Octubre 2017, 18:48 pm
Creo que el problema esta en lo que no se ve.

Como estas definiendo str_global?

No lo muestras, muestras que estas copiando en esa variable, pero no aparece definida.
Ahi debe estar el problema.

Páginas: 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines