Frage

Nicht Inline-Funktion in Header-Datei definiert mit Wachen

#if !defined(HEADER_RANDOM_H)
#define HEADER_RANDOM_H 
void foo()
{
//something
}
#endif

Ergebnisse in Linker-Fehler: Bereits in someother.obj Datei definiert Macht die Funktion Inline funktioniert gut, aber ich bin nicht in der Lage zu verstehen, warum die Funktion bereits im ersten Fall erroring geführt wird.

War es hilfreich?

Lösung

Wenn der Header in mehr als einer Quelldatei enthalten ist, und die Funktion ist nicht markiert als „inline“ Sie werden mehr als eine Definition haben. Die gehören Wachen nur mehrere Einschlüsse in derselben Quelldatei verhindern.

Andere Tipps

Sie verletzen die eine Definition Regel . Wenn Sie eine Funktion direkt in der Kopfzeile definieren wollen, müssen Sie es als inline markieren - das die Funktion mehrmals definiert werden können. Beachten Sie auch, dass inline keine andere Bedeutung hat, insbesondere ist es nicht, den Compiler zwingen, Anrufe (entgegen der landläufigen Meinung) inline.

Da es nicht inline ist, jede Übersetzungseinheit wird seine eigene Kopie der Funktion hat, was zur Funktion mehrmals definiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top