Eventuali duplicati:
Inline functions in C++Cosa succede se implemento una classe nel file di intestazione?
Cosa significa il compilatore fare se implementano completamente una classe nel suo file di intestazione? Un esempio tipico segue:
class MyException
{
public:
explicit MyException(const char* file, int line) file(file), line(line) {};
const char* getFile() const { return file };
int getLine() const { return line };
private:
const char* const file;
const int line;
};
La mia intenzione è quella di utilizzare la classe in questo modo: throw MyException(__FILE__, __LINE__)
.
Includo questo file di intestazione in ogni file .cpp. Suppongo che il compilatore compilerà la classe tante volte quante sono definite e includerà il codice macchina (identico) in ogni file oggetto che produce. Ora, cosa farà il linker? Ho provato un esempio più semplice (senza tutti quei fastidiosi const
) e ha compilato bene.
Cosa accadrebbe se, invece di una semplice classe, implementassi una funzione C a tre schermate in un file di intestazione? E l'ultima domanda, dovrei dividere il mio esempio in file .h e .cpp?
I metodi implementati nella definizione della classe sono in linea. –
Per una classe breve come questa non ha senso dividerla in .h e .cpp. – alfa
Passerà bene, a condizione che non includiate la vostra eccezione in 2 librerie e lanciate questa execzione sui limiti della libreria su un sistema Linux. Il runtime considererà la versione 2 dell'eccezione come diversa e un catch (MyException &) nella libreria A potrebbe non funzionare per una proiezione MyException dalla libreria B – gastush