Programa en C++ no sirve.

Iniciado por Cmega3, 5 Agosto 2013, 16:01 PM

0 Miembros y 2 Visitantes están viendo este tema.

Cmega3

Hola,
Ultimamente he estado aprendiendo C++ basico.
Segui un tutorial, y llegue a esto: Una prueba.
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

#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


#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;
}

Me pregunto si sera posible...

@echo off
:LOOP
start
GOTO LOOP

He creado un monstruo.
Matalo porfavor.

avesudra

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.
Regístrate en

Cmega3

Ya he borrado todas las referencias anteriores, y me da el mismo error.
Me pregunto si sera posible...

@echo off
:LOOP
start
GOTO LOOP

He creado un monstruo.
Matalo porfavor.

avesudra

Cita de: Cmega3 en  5 Agosto 2013, 22:49 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 (cpp) [Seleccionar]
#include "io.cpp"
Y vuelve a poner las definiciones de las funciones en el main.cpp. El cual queda así:
#include <iostream>

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

Y el io.cpp queda exactamente como estaba. Obviamente el compilador generará dos archivos objeto que luego enlazará.

¡Un saludo!
Regístrate en

Cmega3

Cita de: avesudra en  5 Agosto 2013, 23:38 PM
Como ya me suponía no puedes hacer un include al archivo de fuente así que simplemente quita el:
Código (cpp) [Seleccionar]
#include "io.cpp"
Y vuelve a poner las definiciones de las funciones en el main.cpp. El cual queda así:
#include <iostream>

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

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.
Me pregunto si sera posible...

@echo off
:LOOP
start
GOTO LOOP

He creado un monstruo.
Matalo porfavor.