Foros del Web » Programación para mayores de 30 ;) » Programación General »

Error en la ejecución de C++

Estas en el tema de Error en la ejecución de C++ en el foro de Programación General en Foros del Web. Saludos. Yo cree un Workspace, el cual tiene 1 proyecto. También cree 1 programa llamado "Practica 1", lo subí al compilador de C++ y lo ...
  #1 (permalink)  
Antiguo 28/08/2005, 18:27
 
Fecha de Ingreso: diciembre-2004
Mensajes: 24
Antigüedad: 19 años, 4 meses
Puntos: 0
Error en la ejecución de C++

Saludos. Yo cree un Workspace, el cual tiene 1 proyecto. También cree 1 programa llamado "Practica 1", lo subí al compilador de C++ y lo pude ejecutar de lo más bien. Después cree otro programa llamado "Practica 2" en el mismo Workspace, lo subí al compilador de C++ y cuando lo voy a ejecutar me sale este error:

--------------------Configuration: Practica 1 - Win32 Debug--------------------
Linking...
practica 2.obj : error LNK2005: _main already defined in practica1.obj
Debug/Practica 1.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Practica 1.exe - 2 error(s), 0 warning(s)

Después trate de ejecutar el programa llamado "Practica 1" y me salió el mismo error que puse arriba. Me gustaría saber ¿qué fue lo que hize mal? espero sus respuestas y gracias anticipadas .
  #2 (permalink)  
Antiguo 28/08/2005, 18:34
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Bueno, lo que pasa es que tienes 2 codigos fuente (archivos .cpp) con la funcion main.

La funcion main es la que inicia todos los programas, el compilador, al ver que hay 2 funciones main, no sabe cual ejecutar.

Recuerda solo debe de haber una funcion main por cada workspace (proyecto) que tengas, y no por cada archivo...
  #3 (permalink)  
Antiguo 28/08/2005, 19:01
 
Fecha de Ingreso: diciembre-2004
Mensajes: 24
Antigüedad: 19 años, 4 meses
Puntos: 0
Ya borre la función "int main ()" del programa llamado "Practica 2" y cuando lo voy a ejecutar me sale solamente un error:

--------------------Configuration: Practica 1 - Win32 Debug--------------------
Compiling...
practica 2.cpp
C:\Program Files\Microsoft Visual Studio\practica 2.cpp(12) : error C2447: missing function header (old-style formal list?)
Error executing cl.exe.

Practica 1.exe - 1 error(s), 0 warning(s)

También me sale el mismo error cuando voy a ejecutar el programa llamado "Practica 1". Me gustaría saber otra vez ¿qué fue lo que hize mal? espero sus respuestas y gracias anticipadas .
  #4 (permalink)  
Antiguo 28/08/2005, 19:12
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
A ver... podrias poner el codigo fuente de todos los archivos que tengas en tu proyecto :D Esque... deberia de funcionar asi...

Si los pones, los pruebo a ver si te puedo ayudar :D
  #5 (permalink)  
Antiguo 28/08/2005, 19:26
 
Fecha de Ingreso: diciembre-2004
Mensajes: 24
Antigüedad: 19 años, 4 meses
Puntos: 0
Ok. Aquí está el código del programa llamado "Practica 1":

/*Programa que presenta la historia
de C y C++
*/

#include <iostream>

using namespace std;

int main ( )
{
cout << "Denise Richie desarrollo C y " ;
cout << "Bjarne Stroustrup desarrollo C++" <<endl ;
cout << "en los Bell Labs" << endl<< endl ;

return 0 ;
}

Y aquí está el código del programa llamado "Practica 2":

// Primer programa de practica hecho por Prof. E. Haddock
/* Un comentario puede estar representado con // en una linea.
Si el comentario abarca mas de una linea se recomienda
usar /* para comenzar un comentario y para cerrar el comentario usa ------>*/


#include <iostream> // #include se utiliza para indicar los header files a utilizar
using namespace std ; /* esta instrucción es para que el programa reconozca
cout, como instrucción, entre otras
*/

{
cout << "C++ fue creado en los '80 " ;
cout << " y fue derivado del lenguaje C " << endl ;
cout << "Ambos lenguajes usan funciones. " << endl << endl ;
cout << "Tambien usan librerias y header files. \n\n " ;
return 0;
}

Espero tú respuesta y gracias anticipadas .
  #6 (permalink)  
Antiguo 28/08/2005, 19:47
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Sencillamente, son dos programas totalmente distintos y no deberían compilar a un mismo binario. Usa dos Workspaces diferentes.

Además, has borrado el main del segundo programa... ¿Estás loco? ;)
  #7 (permalink)  
Antiguo 28/08/2005, 20:02
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Ok, los codigos correctos son los siguientes (tomando en cuanta que los dos forman parte de un proyecto de Visual Studio):

proyecto1.cpp

Código:
#include<iostream>

usingnamespace std;
 
extern int Historia(); /*La palabra extern se utiliza cuando vamos a llamar a una funcion que esta en otro archivo .cpp que pertenece al proyecto, obviamente aqui aun no la utilizo, solo la declaro*/
 
int main ( )
{
cout << "Denise Richie desarrollo C y " ;
cout << "Bjarne Stroustrup desarrollo C++" <<endl ; 
cout << "en los Bell Labs" << endl<< endl ;
Historia(); /*Aqui llamo a la funcion Historia que esta en el archivo proyecto2.cpp y que defini arriba*/
return0 ;
}
 


Ahora talvez diras: "Esa funcion yo no la cree!!", bueno, aqui esta el codigo de proyecto2.cpp

proyecto2.cpp

Código:
#include<iostream>// #include se utiliza para indicar los header files a utilizar 
usingnamespace std ; /* esta instrucción es para que el programa reconozca cout, como instrucción, entre otras*/

int Historia()
{ 
cout << "C++ fue creado en los '80 " ; 
cout << " y fue derivado del lenguaje C " << endl ; 
cout << "Ambos lenguajes usan funciones. " << endl << endl ; 
cout << "Tambien usan librerias y header files. \n\n " ; 

/* Esta funcion la tuve que creear porque recuerda que cada bloque (o sea, las instrucciones que estan entre { y }) deben pertenecer a algo, ya sea funcion, clase, espacio de nombres, condicion, etc... tu error fue que en el codigo que tu intentabas compilar no pertenecia a nada... solo estaba entre llaves y nada mas... asi que tuve que hacer que perteneciera a una funcion, en este caso "int Historia()",*/
return0;
}  


Asi ya compila, si no entiendes algo, leete un tutorial de C o preguntale a tu maestro... No te preocupes... son cosas que se nos pasan cuando aun le agarramos la onda a esto de la programacion
  #8 (permalink)  
Antiguo 28/08/2005, 20:03
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Cita:
Iniciado por MaxExtreme
Sencillamente, son dos programas totalmente distintos y no deberían compilar a un mismo binario. Usa dos Workspaces diferentes.

Además, has borrado el main del segundo programa... ¿Estás loco? ;)
Nada que ver...
  #9 (permalink)  
Antiguo 28/08/2005, 20:14
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Cita:
Iniciado por El codigo fuente de Javi 777
Tambien usan librerias y header files.
Que bien que desde el principio sepas que las librerias y los archivos cabecera son cosas diferentes... Muchos creen que son lo mismo
  #10 (permalink)  
Antiguo 28/08/2005, 20:41
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por scrolling
Nada que ver...
¿Perdón? Eso eran dos programas diferentes, según dijo él, y los intentó juntar. Como se ve en los comentarios, de personajes diferentes. Parecía el mismo ejercicio, a entregar conjuntamente o similar...

Por cierto, te has equivocado, usar "extern" para llamar a funciones de otros archivos fuente... es una bobada... ¿Para qué lo pones? extern se suele usar para poder usar variables declaradas en otros archivos fuentes, pero no funciones.......
  #11 (permalink)  
Antiguo 28/08/2005, 21:03
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Cita:
Iniciado por MaxExtreme
¿Perdón? Eso eran dos programas diferentes, según dijo él, y los intentó juntar. Como se ve en los comentarios, de personajes diferentes. Parecía el mismo ejercicio, a entregar conjuntamente o similar...

Por cierto, te has equivocado, usar "extern" para llamar a funciones de otros archivos fuente... es una bobada... ¿Para qué lo pones? extern se suele usar para poder usar variables declaradas en otros archivos fuentes, pero no funciones.......
Pues que extraño que yo sí le entendi...

Pero bueno, tienes razon en eso de extern, ya que aunque no lo ponga va a compilar el programa, en lo personal prefiero usarlo para asi saber que esa funcion esta en otro archivo y que ahi solo esta la declaracion y no la definicion... Cuestion de gustos... A mi me compilo de las 2 formas, con y sin extern...

Ademas, extern no lo uso "para llamar a funciones de otros archivos fuente", como dices, se usa para declarar la funcion, no para llamarla...
  #12 (permalink)  
Antiguo 29/08/2005, 10:18
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por scrolling
Pues que extraño que yo sí le entendi...

Pero bueno, tienes razon en eso de extern, ya que aunque no lo ponga va a compilar el programa, en lo personal prefiero usarlo para asi saber que esa funcion esta en otro archivo y que ahi solo esta la declaracion y no la definicion... Cuestion de gustos... A mi me compilo de las 2 formas, con y sin extern...

Ademas, extern no lo uso "para llamar a funciones de otros archivos fuente", como dices, se usa para declarar la funcion, no para llamarla...
Mmm... En _todos_ los archivos que quieras que funcione la función debe aparecer la definición, incluido en el archivo fuente donde esté la implementación... Vamos, esa es la manera "estándar" de organizar los archivos... Un header que contiene definiciones que sirve a todos los archivos fuente incluido al que tiene la implementación.

La verdad, si trabajas con 20 archivos fuente no puedes andar poniendo "extern" en los headers... Un header es para eso, para declarar implementaciones de otros archivos fuente.

Realmente no te puedo decir que desventajas reales hay usando extern, pero lo que sé es que no he visto a nadie que lo use para ese propósito... Así que mejor olvídate de él. ;)
  #13 (permalink)  
Antiguo 29/08/2005, 10:55
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Cita:
Iniciado por MaxExtreme
Así que mejor olvídate de él. ;)
Jajaja, ya sabes... solo estaba esperando a que tu me lo dijeras...

Ademas nada mas fue en este caso en el que tiene 2 archivos .cpp y ninguno .h
  #14 (permalink)  
Antiguo 29/08/2005, 17:49
 
Fecha de Ingreso: diciembre-2004
Mensajes: 24
Antigüedad: 19 años, 4 meses
Puntos: 0
Saludos. Gracias scrolling y MaxExtreme por sus respuestas y ayudas . Scrolling no he probado el código que me distes, porque yo antes de preguntar en este Foro le había enviado un E-mail a la Profesora (El cual después de enviarselo par de días atrás me lo vino a contestar hoy.) y hoy antes de entrar a este Foro, leí la contestación de ella que fue la siguiente:

"Ese error sale cuando ambos programas estan seleccionados (tienen un flecha). Para desactivar uno de los dos, te posicionas en el nombre del archivo Right Click, escoges Setting > General > Exclude from build.

En otras palabras, sólo puedes corre un programa a la vez."

Pues hize ese procedimiento, el cual ella me dijo y pues me funciono de lo más bien. Pero como quiera usaré el código que me distes para otros programas que tengo hechos, los cuales me salieron el mismo error que mencione al empezar el Tema. Después que use el código que me distes, postearé mi respuesta en este mismo Tema sobre si me funciono el código o no. Mil gracias por tu ayuda .
  #15 (permalink)  
Antiguo 30/08/2005, 08:20
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por scrolling
Jajaja, ya sabes... solo estaba esperando a que tu me lo dijeras...

Ademas nada mas fue en este caso en el que tiene 2 archivos .cpp y ninguno .h
Resultó en que tenía razón: Eran dos programas distintos ^^
  #16 (permalink)  
Antiguo 30/08/2005, 12:52
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Cita:
Iniciado por MaxExtreme
Resultó en que tenía razón: Eran dos programas distintos ^^
Wow! Parece que compites aquí! :s
  #17 (permalink)  
Antiguo 30/08/2005, 12:59
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Evidentemente la razon la tenia MaxExtreme. El respondio la pregunta correctamente y vos le dijiste que nada que ver ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #18 (permalink)  
Antiguo 30/08/2005, 13:15
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
A mi me da igual, con que le hayamos ayudado a contestar la pregunta esta bien... Si quieren celebrar su triunfo Bravo!
  #19 (permalink)  
Antiguo 30/08/2005, 13:20
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Cita:
Iniciado por scrolling
A mi me da igual, con que le hayamos ayudado a contestar la pregunta esta bien... Si quieren celebrar su triunfo Bravo!
Ahora saco la copa del campeon
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:48.