Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

128
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda