Foro de elhacker.net

Foros Generales => Dudas Generales => Mensaje iniciado por: Cmega3 en 5 Agosto 2013, 16:01 pm



Título: Programa en C++ no sirve.
Publicado por: Cmega3 en 5 Agosto 2013, 16:01 pm
Hola,
Ultimamente he estado aprendiendo C++ basico.
Segui un tutorial, y llegue a esto: Una prueba. (http://www.learncpp.com/cpp-tutorial/111-comprehensive-quiz/)
Estoy usando Code::Blocks con Digital Mars.
Estoy en el paso #2, sin embargo recibo este error:

||=== Quiz, Debug ===|
obj\Debug\main.o||In function `Z10ReadNumberv':|
C:\Users\ClaudioJ\Desktop\Code\C++\Quiz\io.cpp|7|multiple definition of `ReadNumber()'|
obj\Debug\io.o:C:\Users\ClaudioJ\Desktop\Code\C++\Quiz\io.cpp|7|first defined here|
obj\Debug\main.o||In function `Z11WriteAnsweri':|
C:\Users\ClaudioJ\Desktop\Code\C++\Quiz\io.cpp|16|multiple definition of `WriteAnswer(int)'|
obj\Debug\io.o:C:\Users\ClaudioJ\Desktop\Code\C++\Quiz\io.cpp|16|first defined here|
||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|

Estas son las files que estoy usando:

main.cpp

Código:
#include <iostream>
#include "io.cpp"

using namespace std;

int ReadNumber();
void WriteAnswer(int x);

int main()
{

    cout << "Give us your numbers!" << endl;
    int x = ReadNumber();
    int y = ReadNumber();
    WriteAnswer(x + y);
    return 0;
}



io.cpp

Código:
#include <iostream>

using namespace std;

int ReadNumber ()
{
    cout << "Give me a first number: ";
    int x;
    cin >> x;
    return x;
}


    void WriteAnswer (int x)
{
    cout << "Your numbers added are:" << x << endl;
}


Título: Re: Programa en C++ no sirve.
Publicado por: avesudra en 5 Agosto 2013, 22:11 pm
Vamos a ver, aunque esto va a en el subforo de C++ te respondo aquí, el error te dice que hay una definición múltiple de las funciones  ReadNumber() y WriteAnswer() ¿y porqué?  pues como podrás imaginar si en "io.cpp" ya están definidas esas funciones, y las defines otra vez en main.cpp hay una definición múltiple tal y como dice el compilador. Teóricamente deberías incluir un archivo de cabecera(.hpp) no uno de fuente(.cpp) pero como hasta tal punto no llego prefiero quedarme al margen. Para arreglarlo simplemente elimina las definiciones de las dos funciones del main.cpp aunque no es la mejor opción.


Título: Re: Programa en C++ no sirve.
Publicado por: Cmega3 en 5 Agosto 2013, 22:49 pm
Ya he borrado todas las referencias anteriores, y me da el mismo error.


Título: Re: Programa en C++ no sirve.
Publicado por: avesudra en 5 Agosto 2013, 23:38 pm
Ya he borrado todas las referencias anteriores, y me da el mismo error.
Como ya me suponía no puedes hacer un include al archivo de fuente así que simplemente quita el:
Código
  1. #include "io.cpp"
Y vuelve a poner las definiciones de las funciones en el main.cpp. El cual queda así:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int ReadNumber();
  6. void WriteAnswer(int x);
  7.  
  8. int main()
  9. {
  10.  
  11.    cout << "Give us your numbers!" << endl;
  12.    int x = ReadNumber();
  13.    int y = ReadNumber();
  14.    WriteAnswer(x + y);
  15.    return 0;
  16. }
Y el io.cpp queda exactamente como estaba. Obviamente el compilador generará dos archivos objeto que luego enlazará.

¡Un saludo!


Título: Re: Programa en C++ no sirve.
Publicado por: Cmega3 en 6 Agosto 2013, 00:59 am
Como ya me suponía no puedes hacer un include al archivo de fuente así que simplemente quita el:
Código
  1. #include "io.cpp"
Y vuelve a poner las definiciones de las funciones en el main.cpp. El cual queda así:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int ReadNumber();
  6. void WriteAnswer(int x);
  7.  
  8. int main()
  9. {
  10.  
  11.    cout << "Give us your numbers!" << endl;
  12.    int x = ReadNumber();
  13.    int y = ReadNumber();
  14.    WriteAnswer(x + y);
  15.    return 0;
  16. }
Y el io.cpp queda exactamente como estaba. Obviamente el compilador generará dos archivos objeto que luego enlazará.

¡Un saludo!

¡Muchas gracias!
Esto resolvió mi problema.