Foro de elhacker.net

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
  1. /*
  2.  * File:   main.cpp
  3.  * Author: jairo
  4.  *
  5.  * Created on 18 de mayo de 2013, 22:59
  6.  */
  7.  
  8. #include <cstdlib>
  9. #include <iostream>
  10. #include <stdio.h>
  11. #include <string>
  12. #include <stdlib.h>
  13.  
  14. using namespace std;
  15.  
  16. /*
  17.  *
  18.  */
  19. int main(int argc, char** argv) {
  20.    int matrizr [5][4]= {{1,2,5,1},{3,1,2,2},{2,3,3,2},{1,4,2,0},{4,2,0,3}};
  21.    int ce=0;
  22.    int *pvector;
  23.    pvector=matrizr[0];
  24.    //int puntuacion;
  25.    cout<<"\nIntroduce el codigo del equipo: ";
  26.    cin>>ce;
  27.  
  28.    //int puntuacion = puntos(matrizr,ce);
  29.    cout<<"\nLa puntuación es "<<puntos(pvector, ce)<<".";
  30.    return 0;
  31. }
  32.  
  33. int puntos(int *matriz, int codigoequipo){
  34.    int *pmatriz;
  35.    pmatriz=matriz;
  36.    int matrizc[5][4];
  37.  
  38.    int puntuacion=0;
  39.    for (int i=0; i<=5; i++){
  40.        for (int j=0; i<=4; j++){
  41.            int tam = i*4+j*4;
  42.            matrizc[i][j]= pmatriz[tam];
  43.         }  
  44.        }
  45.  
  46.    for (int i=0; i<=5; i++){
  47.        for (int j=0; i<=2; j++){
  48.            if(matrizc[i][j]==codigoequipo && j==1){
  49.                        if(matrizc[i][3]>matrizc[i][4]){puntuacion= puntuacion +3;}
  50.                        if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
  51.                        }  
  52.            if(matrizc[i][j]==codigoequipo && j==2){
  53.                        if(matrizc[i][3]<matrizc[i][4]){puntuacion= puntuacion +3;}
  54.                        if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
  55.                        }
  56.  
  57.  
  58.        }
  59.  
  60.    }
  61.    return puntuacion;
  62. }
  63.  
Código
  1.  


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
  1. 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
  1. /*
  2.  * File:   main.cpp
  3.  * Author: jairo
  4.  *
  5.  * Created on 18 de mayo de 2013, 22:59
  6.  */
  7.  
  8. #include <cstdlib>
  9. #include <iostream>
  10. #include <stdio.h>
  11. #include <string>
  12. #include <stdlib.h>
  13.  
  14. using namespace std;
  15.  
  16. /*
  17.  *
  18.  */
  19.  
  20. int puntos(int *matriz, int codigoequipo); // Prototipo
  21.  
  22. int main(int argc, char** argv) {
  23.    int matrizr [5][4]= {{1,2,5,1},{3,1,2,2},{2,3,3,2},{1,4,2,0},{4,2,0,3}};
  24.    int ce=0;
  25.    int *pvector;
  26.    pvector=matrizr[0];
  27.    //int puntuacion;
  28.    cout<<"\nIntroduce el codigo del equipo: ";
  29.    cin>>ce;
  30.  
  31.    //int puntuacion = puntos(matrizr,ce);
  32.    cout<<"\nLa puntuación es "<<puntos(pvector, ce)<<".";
  33.    return 0;
  34. }
  35.  
  36. int puntos(int *matriz, int codigoequipo){
  37.    int *pmatriz;
  38.    pmatriz=matriz;
  39.    int matrizc[5][4];
  40.  
  41.    int puntuacion=0;
  42.    for (int i=0; i<=5; i++){
  43.        for (int j=0; i<=4; j++){
  44.            int tam = i*4+j*4;
  45.            matrizc[i][j]= pmatriz[tam];
  46.         }  
  47.        }
  48.  
  49.    for (int i=0; i<=5; i++){
  50.        for (int j=0; i<=2; j++){
  51.            if(matrizc[i][j]==codigoequipo && j==1){
  52.                        if(matrizc[i][3]>matrizc[i][4]){puntuacion= puntuacion +3;}
  53.                        if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
  54.                        }  
  55.            if(matrizc[i][j]==codigoequipo && j==2){
  56.                        if(matrizc[i][3]<matrizc[i][4]){puntuacion= puntuacion +3;}
  57.                        if(matrizc[i][3]=matrizc[i][4]){puntuacion= puntuacion +1;}
  58.                        }
  59.  
  60.  
  61.        }
  62.  
  63.    }
  64.    return puntuacion;
  65. }
  66.  


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
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