Ich habe einen Namespace mit Inline-Funktion, die verwendet wird, wenn mehrere Quelldateien. Beim Versuch, meine Anwendung zu verknüpfen, werden die Inline-Funktionen als doppelte Symbole gemeldet. Es scheint, als ob mein Code einfach nicht die Funktionen inline und ich frage mich, ob dies das erwartete Verhalten ist und wie man am besten damit umgehen.Inline-Funktion im Namespace erzeugen doppelte Symbole während der Verbindung auf gcc
Ich verwende die folgenden gcc Optionen: -g -Wextra -pedantic -Wmissing-Feld-initializers -Wredundant-decls -Wfloat-gleich -Wno-Neuordnungs -Wno-lang-lang Der gleiche Code Stil scheint zu kompilieren und ordnungsgemäß verknüpfen, wenn in einer VC7-Umgebung erstellt wird.
Das folgende Codebeispiel zeigt die Struktur des Codes:
/* header.h */
namespace myNamespace {
inline bool myFunction() {return true;}
}
/* use_1.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
/* use_2.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
Ist eine globale Variable in jeder cpp-Datei in Ordnung? Das würde einen doppelten Symbolfehler verursachen. Unter der Annahme, dass es nicht global ist, ist Ihr Beispiel legales C++. Versuchen Sie, mit -Winline zu kompilieren. Welche Version von gcc verwendest du? –
Bitte poste die eigentliche Compiler Nachricht. Tritt der Fehler bei minimalen Quelldateien auf (nur die erwähnten Zeilen ohne die durch ... implizierten Dinge)? –
Nachdem ich einen der Namen von 'OK' in 'OK1' geändert habe, habe ich eine leere' main' Funktion hinzugefügt und den '...' entfernt; Das Kompilieren beider Dateien mit den von Ihnen angegebenen Optionen funktionierte für mich korrekt. Sie müssen mehr Details posten, da die Ursache Ihres Fehlers nicht hier ist. –