Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: oriaj3 en 20 Mayo 2013, 13:34 PM

Título: Error no se declaró en este ámbito.
Publicado por: oriaj3 en 20 Mayo 2013, 13:34 PM
Error en esta función--> main.cpp:29:53: error: 'puntos' no se declaró en este ámbito. ¿Alguien tiene idea de la posible solución?

Código (cpp) [Seleccionar]
/*
* File:   main.cpp
* Author: jairo
*
* Created on 18 de mayo de 2013, 22:59
*/

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string>
#include <stdlib.h>

using namespace std;

/*
*
*/
int main(int argc, char** argv) {
   int matrizr [5][4]= {{1,2,5,1},{3,1,2,2},{2,3,3,2},{1,4,2,0},{4,2,0,3}};
   int ce=0;
   int *pvector;
   pvector=matrizr[0];
   //int puntuacion;
   cout<<"\nIntroduce el codigo del equipo: ";
   cin>>ce;
   
   //int puntuacion = puntos(matrizr,ce);
   cout<<"\nLa puntuación es "<<puntos(pvector, ce)<<".";
   return 0;
}

int puntos(int *matriz, int codigoequipo){
   int *pmatriz;
   pmatriz=matriz;
   int matrizc[5][4];
   
   int puntuacion=0;
   for (int i=0; i<=5; i++){
       for (int j=0; i<=4; j++){
           int tam = i*4+j*4;
           matrizc[i][j]= pmatriz[tam];
        }  
       }
       
   for (int i=0; i<=5; i++){
       for (int j=0; i<=2; j++){
           if(matrizc[i][j]==codigoequipo && j==1){
                       if(matrizc[i][3]>matrizc[i][4]){puntuacion= puntuacion +3;}
                       if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
                       }  
           if(matrizc[i][j]==codigoequipo && j==2){
                       if(matrizc[i][3]<matrizc[i][4]){puntuacion= puntuacion +3;}
                       if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
                       }
       
       
       }

   }
   return puntuacion;
}
Código (actionscript-french) [Seleccionar]
Título: Re: Error no se declaró en este ámbito.
Publicado por: leosansan en 20 Mayo 2013, 14:24 PM

Vuelve a colgar el código esta vez usando las etiquetas GeSHi ce C++, pegas el código en medio de las etiquetas que te salen, si no, no se entiende nada. Las matrices por ejemplo, tal como están, salen incompletas.

R
Te adelanto que tienes duplicada la librería stdlib, es lo mismo que cstdlib y la string, ya que estas en C++ deberías ponerla como cstring.

Saluditos!. ..... ..
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Título: Re: Error no se declaró en este ámbito.
Publicado por: amchacon en 20 Mayo 2013, 14:33 PM
Tienes que poner un prototipo de la función antes del main:

Código (cpp) [Seleccionar]
int puntos(int *matriz, int codigoequipo);

De esa forma el compilador sabe que existe la función aunque aún no la hayas definido todavía:

Código (cpp) [Seleccionar]
/*
* File:   main.cpp
* Author: jairo
*
* Created on 18 de mayo de 2013, 22:59
*/

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string>
#include <stdlib.h>

using namespace std;

/*
*
*/

int puntos(int *matriz, int codigoequipo); // Prototipo

int main(int argc, char** argv) {
   int matrizr [5][4]= {{1,2,5,1},{3,1,2,2},{2,3,3,2},{1,4,2,0},{4,2,0,3}};
   int ce=0;
   int *pvector;
   pvector=matrizr[0];
   //int puntuacion;
   cout<<"\nIntroduce el codigo del equipo: ";
   cin>>ce;

   //int puntuacion = puntos(matrizr,ce);
   cout<<"\nLa puntuación es "<<puntos(pvector, ce)<<".";
   return 0;
}

int puntos(int *matriz, int codigoequipo){
   int *pmatriz;
   pmatriz=matriz;
   int matrizc[5][4];

   int puntuacion=0;
   for (int i=0; i<=5; i++){
       for (int j=0; i<=4; j++){
           int tam = i*4+j*4;
           matrizc[i][j]= pmatriz[tam];
        }  
       }

   for (int i=0; i<=5; i++){
       for (int j=0; i<=2; j++){
           if(matrizc[i][j]==codigoequipo && j==1){
                       if(matrizc[i][3]>matrizc[i][4]){puntuacion= puntuacion +3;}
                       if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
                       }  
           if(matrizc[i][j]==codigoequipo && j==2){
                       if(matrizc[i][3]<matrizc[i][4]){puntuacion= puntuacion +3;}
                       if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
                       }


       }

   }
   return puntuacion;
}
Título: Re: Error no se declaró en este ámbito.
Publicado por: oriaj3 en 20 Mayo 2013, 15:00 PM
Muchísimas gracias amchacon lo mio no tiene perdón, pero como leve escusa estoy de exámenes y entre C++, programación orientada a objetos, sql y java, me estoy volviendo loco.
Título: Re: Error no se declaró en este ámbito.
Publicado por: amchacon en 20 Mayo 2013, 15:03 PM
Cita de: oriaj3 en 20 Mayo 2013, 15:00 PM
Muchísimas gracias amchacon lo mio no tiene perdón, pero como leve escusa estoy de exámenes y entre C++, programación orientada a objetos, sql y java, me estoy volviendo loco.
Me da mí que ya lo sabías... Como entiendo esa sensación  ;-)

El 90% de los errores no es por ignorancia sino por despiste. Te lo digo por experiencia xD
Título: Re: Error no se declaró en este ámbito.
Publicado por: oriaj3 en 20 Mayo 2013, 19:44 PM
Dímelo que acabo de salir de un examen de c++, donde he devuelto un vector de estructuras en plan return vectorDeEstructuras;

en vez de hacerlo con new y declarando memoria dinamica :S