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:
#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 #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!
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.
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;