Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

126
Vistas
Problemas aleatorios con definición

Estoy tratando de compilar mi código. El compilador está dando errores aleatorios sobre 'definición múltiple':

/tmp/cctnjqVc.o:(.bss+0x0): definición múltiple de 'nombre'
/tmp/ccPgFuZw.o:(.bss+0x0): definido por primera vez aquí
/tmp/cctnjqVc.o:(.bss+0x200): definición múltiple de 'resultName[abi:cxx11]'
/tmp/ccPgFuZw.o:(.bss+0x200): definido por primera vez aquí

Puedo asegurarle que no hay ninguna definición múltiple en mi código. Mi código está en varios archivos, así que si quieres verlos todos:

http://www.github.com/calmunicorn/virtualsociety

pero hay dos archivos que creo que están preocupados:

FileStream.h

 #ifndef FILESTREAM_H #define FILESTREAM_H #include <fstream> #include <string> #include <limits> using namespace std; static fstream logFile; ofstream firstname; void log(string argument); string firstName_read(bool boyOrGirl); string resultName; #endif

FileStream.cpp

 #include "FileStream.h" void log(string argument) { logFile.open ("log.txt", fstream::out | fstream::app); logFile << argument; logFile.close(); } string firstName_read (bool boyOrGirl) { if (boyOrGirl == true) { firstname.open("Name/FirstName_Male.txt", fstream::in); firstname.close(); return resultName; } else { firstname.open("Name/FirstName_Female.txt", fstream::in); firstname.close(); return resultName; } }

Estoy en Arch Linux si hace alguna diferencia.


editar :

¡Gracias por toda la respuesta, hice todo lo que me dijeron y ahora funciona sin ningún problema!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Usted violó ODR al definir (en lugar de simplemente declarar) firstname y resultName en el encabezado. Lo que debe hacer para declararlos es enumerarlos como extern en el archivo de encabezado:

 extern ofstream firstname; extern string resultName;

y tenga la definición (sin extern ) en el archivo .cpp .

Por cierto, los encabezados no deben usarse using namespace . Califique explícitamente todo en su encabezado, en su lugar.

over 4 years ago · Santiago Trujillo Denunciar

0

Esta línea en FileStream.h

 ofstream firstname;

definirá un nombre de variable en cada archivo firstname que incluya el .h.

Probablemente quieras cambiar eso a una declaración en el .h

 extern ofstream firstname;

luego defínalo en solo uno de los archivos .cpp

 ofstream firstname;
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda