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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda error en array bidimensional
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda error en array bidimensional  (Leído 1,701 veces)
kerkox

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Ayuda error en array bidimensional
« en: 21 Abril 2014, 02:58 am »

Hola amigos estoy tratando de hacer un tablero con un array bidimensional, pero me da un error cuando en la clase del tablero he definido que debe de contener un array de 3x3 y tambien lo he hecho con uno sin definir pero no funciona da error
el codigo es el siguiente

Este es el tablero.h

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include "windows.h"
  4. using namespace std;
  5. #ifndef TABLERO_H
  6. #define TABLERO_H
  7.  
  8.  
  9.  
  10.  
  11. class tablero
  12. {
  13.    public:
  14.        tablero(){}
  15.        tablero(string tablelimpio);
  16.        ~tablero();
  17.        string dartablero();
  18.     protected:
  19.    private:
  20.        string vacio;
  21.        int i, j, k;
  22.        string tavacio;
  23.  
  24. };
  25.  
  26. #endif // TABLERO_H
  27.  


este es el tablero.cpp

Código
  1. #include "tablero.h"
  2.  
  3.  
  4. tablero::tablero(string tablelimpio)
  5. {
  6.  
  7.    tavacio=tablelimpio;
  8.    //cto
  9.  
  10. }
  11.  
  12. tablero::~tablero()
  13. {
  14.    //dtor
  15. }
  16. string tablero::dartablero()
  17. {
  18.  return tavacio;
  19. }
  20.  

he hecho una espcie de menu en el cual se crea el objeto de tipo tablero pero es en este en el que ocurre el error

este es la clase Menu.h

Código
  1. #include "tablero.h"
  2. #ifndef MENU_H
  3. #define MENU_H
  4. using namespace std;
  5.  
  6. class Menu
  7. {
  8.    public:
  9.        Menu();
  10.        ~Menu();
  11.       void vertablero();
  12.       void evaluarTipojuego();
  13.    protected:
  14.    private:
  15.        tablero t1;
  16.        int tipojuego;
  17.        string vacio;
  18. };
  19.  
  20. #endif // MENU_H
  21.  


este es le Menu.cpp

Código
  1. #include "Menu.h"
  2.  
  3. Menu::Menu()
  4. {
  5.  
  6.    tablero t( vacio={"-","-","-","-","-","-","-","-","-"});
  7.    t1=t;
  8.  
  9.    //ctor
  10. }
  11.  
  12. Menu::~Menu()
  13. {
  14.    //dtor
  15. }
  16.  
  17. void Menu::vertablero()
  18. {
  19. cout << "esto es un juego de triki" << endl;
  20.    cout << "" << endl;
  21.    cout << "__________________________" << endl;
  22.    cout << "" << endl;
  23.  
  24.  
  25.  
  26.    for (int i=0; i <3; i++)
  27.        {
  28.            cout << "|"  << t1.dartablero()[i][0] << "|" << "\t";
  29.        }
  30.    cout << endl;
  31.  
  32.    for (int j=0; j<3;j++)
  33.        {
  34.            cout << "|" << t1.dartablero()[j][1] << "|" << "\t";
  35.        }
  36.    cout << endl;
  37.  
  38.    for(int k=0; k<3; k++)
  39.        {
  40.            cout << "|" << t1.dartablero()[k][2]<< "|" <<"\t" ;
  41.        }
  42.    cout << endl;
  43. }
  44.  
  45. void Menu::evaluarTipojuego()
  46. {
  47.  
  48. }

y este es el main

Código
  1. #include "Menu.h"
  2.  
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9.  cout << "Este es el juego de triki  " << endl;
  10.  cin.get();
  11. Menu triki;
  12. triki.vertablero();
  13.   system("pause");
  14.  
  15. }

si alguien me puede ayudar ya que buscado informacion en internet pero no he podido dar con el problema claramente.

Por otro lado tambien encontre que puedo usar vector en vez de array para hacer la matriz


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda error en array bidimensional
« Respuesta #1 en: 21 Abril 2014, 08:48 am »

La forma correcta que debería tener un archivo de cabecera es:

Código
  1. #ifndef TABLERO_H
  2. #define TABLERO_H
  3.  
  4. #include <iostream>
  5. #include <stdlib.h>
  6. #include <windows.h>
  7.  
  8. using namespace std;
  9.  
  10. class tablero
  11. {
  12.    public:
  13.        tablero(){}
  14.        tablero(string tablelimpio);
  15.        ~tablero();
  16.        string dartablero();
  17.     protected:
  18.    private:
  19.        string vacio;
  20.        int i, j, k;
  21.        string tavacio;
  22.  
  23. };
  24.  
  25. #endif // TABLERO_H

O en su defecto

Código
  1. #pragma once
  2.  
  3. #include <iostream>
  4. #include <stdlib.h>
  5. #include <windows.h>
  6.  
  7. using namespace std;
  8.  
  9. class tablero
  10. {
  11.    public:
  12.        tablero(){}
  13.        tablero(string tablelimpio);
  14.        ~tablero();
  15.        string dartablero();
  16.     protected:
  17.    private:
  18.        string vacio;
  19.        int i, j, k;
  20.        string tavacio;
  21.  
  22. };

La protección ifndef debería abarcar todo el fichero, ya que así evitas que en el proceso de compilación y linkado y se carguen los includes de ese fichero varias veces seguidas.

Además, en el caso de esta clase, no usas las variables i,j,k y vacio... deberías eliminarlas.

Código
  1.    tablero t( vacio={"-","-","-","-","-","-","-","-","-"});

¿¿¿??? qué sentido tiene "vacio" en este contexto?? si quieres definir el "tablero" de esta forma, perfecto, pero no emplees un miembro de "menu" específicamente para eso... usa mejor variables locales:

Código
  1. Menu::Menu()
  2. {
  3.    string strTablero = {"-","-","-","-","-","-","-","-","-"};
  4.    t1 = tablero( strTablero );
  5.    //ctor
  6. }

O mejor aún:

Código
  1. Menu::Menu( )
  2.  : t1( "---------" )
  3. {
  4.    //ctor
  5. }

Recuerda que con cada pareja de comillas estás definiendo una cadena, no un carácter suelto ( y las cadenas terminan todas con '\0', mientras que un carácter es... solo un carácter ).

En los ejemplos que has puesto tu, primero se llama al constructor de t1, después se crea t y después se hace una asignación... en este último caso únicamente se llama al constructor de t1. Es más bonito y eficiente.

Código
  1.            cout << "|"  << t1.dartablero()[i][0] << "|" << "\t";

A ver, si dartablero( ) devuelve un string, no puedes usarlo como si fuese una matriz... porque no lo es... en tal caso podrías usarlo como un vector, pero poco más. Puedes emular una matriz con un vector... pero recuerda que es una emulación, en ningún caso sería una matriz real:

Código
  1.    for (int i=0; i <3; i++)
  2.        {
  3.            cout << "|"  << t1.dartablero()[i * filasPorColumna] << "|" << "\t";
  4.        }
  5.    cout << endl;
  6.  
  7.    for (int j=0; j<3;j++)
  8.        {
  9.            cout << "|" << t1.dartablero()[j * filasPorCoumna + 1] << "|" << "\t";
  10.        }
  11.    cout << endl;
  12.  
  13.    for(int k=0; k<3; k++)
  14.        {
  15.            cout << "|" << t1.dartablero()[k * filasPorColumna + 2]<< "|" <<"\t" ;
  16.        }

Y por cierto, podrías reutilizar i en cada bucle... no vas a tener ningún problema:

Código
  1.    for (int i=0; i <3; i++)
  2.        {
  3.            cout << "|"  << t1.dartablero()[i * filasPorColumna] << "|" << "\t";
  4.        }
  5.    cout << endl;
  6.  
  7.    for (int i=0; i <3; i++)
  8.        {
  9.            cout << "|" << t1.dartablero()[i * filasPorCoumna + 1] << "|" << "\t";
  10.        }
  11.    cout << endl;
  12.  
  13.    for (int i=0; i <3; i++)
  14.        {
  15.            cout << "|" << t1.dartablero()[i * filasPorColumna + 2]<< "|" <<"\t" ;
  16.        }

O, ya puestos, combinarlos, que no tiene sentido tanto bucle:

Código
  1. for (int fila=0; fila <3; fila++)
  2. {
  3.  for ( int col = 0; col < 3; col++ )
  4.    cout << "|"  << t1.dartablero()[ fila * filasPorColumna + col ] << "|" << "\t";
  5.  cout << endl;
  6. }

el valor de filasPorColumna, en tu caso, debería valer 3, por si acaso dudas.

En cualquier caso, lo suyo es que usases una matriz de tipo char y así te evitas tener que emular el comportamiento de una matriz... la clase string no es la mejor opción en tu caso.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array bidimensional en pascal.
Ejercicios
sv51 4 14,027 Último mensaje 21 Junio 2008, 22:30 pm
por sv51
Ordenar array bidimensional
Java
KaRaLLo 5 18,643 Último mensaje 1 Abril 2013, 02:36 am
por seraff
[c++][Ayuda] Constructor y destructor con array bidimensional.
Programación C/C++
anonimo12121 2 2,939 Último mensaje 28 Marzo 2012, 22:02 pm
por anonimo12121
Ayuda con Array bidimensional
Programación General
Javaniano 0 1,987 Último mensaje 8 Diciembre 2012, 13:38 pm
por Javaniano
[Ayuda] Problema con Array Bidimensional « 1 2 »
Java
heidozanzo 15 6,987 Último mensaje 9 Noviembre 2015, 15:46 pm
por 0xFer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines