Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - digimikeh

#51
La cita 2 está relacionada con la 3... es que no me supe explicar correctamente...lo siento  :rolleyes:

Entonces la solución que tengo es lo que planteaba Manolo std::string con la palabra extern de lo contrario sería usar objetos persistentes pero no creo que esto sea muy elegante....


#52
Gracias por las respuestas...


Manolo, te refieres a extern ?

Loretz, entonces las variables estáticas se instancian mediante la inclusión de archivos y no de tipos ... es asi?... por ejemplo, lo que has dicho: estoy incluyendo el mismo archivo en dos archivos independientes, serian dos instancias separadas de la variable estatica... sin embargo, si instancio dos tipos Archivo2 en un mismo archivo, ahi si estaria utilizando la misma variable estatica para ambos casos.... ?

Suponiendo que tengo una clase llamada Alpha, que tiene un campo publico estático llamado myName, si yo instancio esta clase mas de una vez dentro del mismo archivo fuente, todas las instancias de la clase estarían accediendo a la misma dirección de memoria de myName...

Es al menos lo que veo aqui en este ejemplo:
https://www.tutorialspoint.com/cplusplus/cpp_static_members.htm

Saludos..
#53
Programación C/C++ / Variables estaticas...
29 Agosto 2019, 05:16 AM
Muy buenas..

Tengo un mal concepto quizá de lo que son las variables estáticas, yo las imagino algo asi como un contenedor que se crea automáticamente al iniciarse un programa, vive durante todo el programa y luego se cierra una vez que el programa termina... como un bolso de viaje que tomas al iniciar el viaje y te deshaces de él cuando regresas a casa... asi es como yo las veo.. (por favor, indicarme si estoy mal).

El siguiente código no esta reflejando esto:

main.cpp
Código (cpp) [Seleccionar]

#include <iostream>
#include "Archivo2.h"
#include "Archivo1.h"

int main() {
x::num = 10;
std::cout << "Desde main -> " << x::num << "Memoria : " << &x::num;
std::cout << std::endl;
Archivo1 a;
a.printVal();
return 0;
}



Archivo1.h
Código (cpp) [Seleccionar]

#pragma once
struct Archivo1{
void printVal() const;
};


Archivo1.cpp
Código (cpp) [Seleccionar]

#include "Archivo2.h"
#include "Archivo1.h"
#include <iostream>

void Archivo1::printVal() const {
std::cout << "Desde Archivo1 -> " << x::num << "Memoria : " << &x::num;

}


Archivo2.h
Código (cpp) [Seleccionar]

namespace x{
    static int num;
}



La salida de consola "Desde Main ->" imprime 10
La salida de consola "Desde Archivo1 ->" imprime 0...

Creí que estaba imprimiendo el mismo elemento, pero no, cuando le agregue que imprimiera la dirección de memoria, me encontré con la sorpresa de que ambas estan imprimiendo direcciones diferentes....

En qué momento se creó una nueva instancia de la variable estática y como puedo solucionar este dilema?.. mi intención es escribir e imprimir en una sola variable x::num

Saludos_!

#54
Buenas..

Tengo este código y me está saliendo error, ppienso que la sintaxis está correcta.. aun no entiendo por qué el error..  Alguna pista?


Ver en el siguiente enlace el codigo para probar:
https://onlinegdb.com/ryO2ptQ7B

Saludos.


Edit : Le quite el simbolo de referencia en el parámetro para la funcion de la linea 5 y ahí compiló..
Pero no veo por qué...
#55
Pues ya esta, me queda claro
Agradecido Loretz..
#56
Entiendo, estará bueno siempre revisar la documentación...

Que vendría siendo ifstream ?.. un canal que conecta a un archivo, o el archivo mismo?
y que vendría siendo el istream_iterator ? un puntero que apunta al contenido del archivo o apunta al contenido del flujo?...

Trato de materializar estos objetos, como podrian ser representados concretamente?

Saludos y gracias.
#57
Hola amigos.. que tal.

Tengo una gran duda, la verdad me confunde un poco el hecho de que se pueda inicializar una variable de 3 formas:

Código (cpp) [Seleccionar]

int x = 3;
int y {4};
int z(5);


Las 3 son válidas, bueno, así como se ve, no está complejo realmente, el problema es cuando usas elementos como un contenedor.. ya que los contenedores aceptan una lista de argumentos encerradas en llave, sin embargo esto me confunde un poco, porque no se cuando está inicializando o cuando está pasando por argumento a un constructor.. o cuando está usando un constructor de conversión.. etc..


Ejemplo:
Código (cpp) [Seleccionar]


vector<string> vs { "Hola", " Que tal"};     //No hay problema..
vector<string> vs2 { 5, 1 };                     //Houston

istream_iterator<string> is;
istream_iterator<string> is2;

vector<string> vs3{is, is2};                     //No hay problema.. por que?




Sospecho que en vs3 no estoy inicializando ... pensé que las llaves eran para eso... que esta pasando en esta línea?..


Saludos y gracias.


--------------------------------

Edito:

Estuve viendo los constructores que tiene std::vector y encontre uno que acepta un iterator de inicio y otro de fin... entonces eso es lo que debe estar aceptando, es decir,  vs3 no esta inicializando, solo le estoy pasando los iteradores que están conectados al flujo de entrada ifstream....  En el fondo lo que me habia confundido es el uso de las llaves, tenia entendido que las llaves servian para inicializar en los contenedores, pero ya vi que hace lo mismo que los parentesis, a menos que este poblando al contenedor, ahi seria una inicialización...

Saludos.
#58
El switch-case esta cortado por las definiciones de funciones. Si metes las funciones al final, se acaba el problema:

Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <stdlib.h>

using namespace std;

void pausa();

struct Nodo{
  int dato;
  Nodo *siguiente;
};




//Prototipos de Función
void agregarPila(Nodo *&,int);
void sacarPila(Nodo *&,int &);
void mostrarPila(Nodo *&,int &);
int main(){
   bool bandera=false;
   char tecla;

   do{
       system("cls");
       cin.clear();
       cout << "Calculadora" << endl;
       cout << "-----------" << endl << endl;
       cout << "\t1 .- Sumar" << endl;
       cout << "\t2 .- Restar" << endl;;
       cout << "elige una opcion: ";

       cin >> tecla;

     switch(tecla){
        case '1':
               {
               Nodo *pila = NULL;   //Inicializamos pila
               int dato, aux;
               char rpt;
               aux=5;
               do{ //Pedimos todos los elementos de la pila
                   //cout<<"Digite un numero: ";
                   //cin>>dato;
                   if (aux<=0||aux>5){
                       cout<<"Alcanzo los 5 digitos: ";
                       break;
                   }
                   cout<<"Digite un numero: ";
                   cin>>dato;
                   
                   if(dato==0){
                       if((aux==5)||(aux==4)||(aux==2)||(aux==1)||(aux==0)){
                           //cout<<aux-1;
                           agregarPila(pila,dato);
                       } else {
                           cout<<"\nNO ES UN VALOR ACEPTADO: ";
                           break;
                       }
                       
                       aux=aux-1;
                       cout<<aux;
                   }
               
               
               if(dato==1){
                   if(aux==3){
                       //cout<<aux-1;
                       agregarPila(pila,dato);
                   } else {
                       cout<<"\nNO ES UN VALOR ACEPTADO: ";
                       break;
                   }
                   aux=aux-1;
                   cout<<aux;
               }
               
               if (aux<=0 || aux>5){
                   cout<<"\n\nAlcanzo los 5 digitos: ";
                   break;
               }          
     
               cout<<"\nDesea agregar otro numero a pila(s/n): ";
               cin>>rpt;
 
           } while((rpt == 's')||(rpt=='S'));
 
     //if (aux<=0||aux>5)
     //{
        //   cout<<"Alcanzo los 5 digitos: ";
           //break;
       //}
 
 
  //cout<<"\nIMPRESION #2: \n";
  //cout<<"\nIMPRESION #2: \n";
           cout<<"Mostrando los elementos de la pila en la columna ENTRADA: ";
  //while(pila != NULL){
  //   sacarPila(pila,dato);
     
  //   if(pila != NULL){
  //      cout<<dato<<" , ";
  //   }
  //   else{
  //      cout<<dato<<".";
  //   }
  //}
 

  //cout<<"\n\n\nIMPRESION #2: \n";
           cout<<"\n\tESTADO\tENTRADA\tRESULTADO\n";
 
           int a=0;
           int b=0;
 
 
           while(pila != NULL){
               sacarPila(pila,dato);
     
               if(pila != NULL){
                   cout<<"\t q"<<a<<"\t "<<dato<<"\t q"<<b<<"\n";
                   if((a==0)&&(b==0)){
                       a=0+dato;
                       b=0+dato;
                   } else {
                       a=1;
                       b=1;
                   }
               } else{
                   cout<<"\t q"<<a<<"\t "<<dato<<"\t q"<<b<<"\n";
               }
           }
 
   
           getch();
           return 0;
           
       }


        case '2':
           system("cls");
           cout << "Has elejido Restar.\n";
           pausa();
           break;

        default:
           system("cls");
           cout << "Opcion no valida.\a\n";
           pausa();
           break;
     }
   }while(bandera!=true);

   return 0;
}

void pausa()
{
   cout << "Pulsa una tecla para continuar...";
   getwchar();
   getwchar();
}

void agregarPila(Nodo *&pila,int n){
  Nodo *nuevo_nodo = new Nodo();
  nuevo_nodo->dato = n;
  nuevo_nodo->siguiente = pila;
  pila = nuevo_nodo;
 
  cout<<"\n\tElemento "<<n<<" agregado a PILA correctamente"<<"\n";
}
void sacarPila(Nodo *&pila,int &n){
  Nodo *aux = pila;
  n = aux->dato;
  pila = aux->siguiente;
  delete aux;
}
void mostrarPila(Nodo *&pila,int &n){
  Nodo *aux = pila;
  n = aux->dato;
  pila = aux->siguiente;
  delete aux;
}
#59
Programación C/C++ / Re: Error C2662 - const
8 Julio 2019, 04:40 AM
Asi es, lo he notado, no pude declarar las funciones no miembro como const... pero no me haré problemas al menos por ahora y las declarare como funciones miembro...

saludos.
#60
Programación C/C++ / Re: Error C2662 - const
8 Julio 2019, 03:53 AM
Muy bien, buenísimas explicaciones, me quedó claro, entonces es una regla del compilador todo esto, ahora le hallo sentido...

@Loretz si tienes tu libro a mano, veras que en la pagina 78 se usa la version const, pero en la pagina 77 solo están definidos begin() y end() de forma no constante... entonces supongo que la reseña esta imcompleta... verdad?