Mam przestrzeń nazw z funkcją inline, która będzie używana, jeśli kilka plików źródłowych. Podczas próby połączenia aplikacji funkcja inline jest zgłaszana jako duplikat symboli. Wygląda na to, że mój kod po prostu nie wstawiłby funkcji i zastanawiałem się, czy jest to oczekiwane zachowanie i jak najlepiej sobie z tym poradzić.Funkcja inline w przestrzeni nazw generuje zduplikowane symbole podczas łączenia w gcc
używam następujące opcje: gcc -g -Wextra -pedantic -Wmissing-field-inicjalizatory -Wredundant-decls -Wfloat równy -Wno-Reorder -Wno-długo-długo Ten sam styl kod wydaje się skompilować i połącz poprawnie podczas budowania w środowisku VC7.
Poniższy przykład kod przedstawia strukturę kodu:
/* 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();
...
Czy OK jest zmienną globalną w każdym pliku cpp? To spowodowałoby duplikowanie błędu symbolu. Zakładając, że nie jest globalny, Twój przykład to legalny C++. Spróbuj skompilować za pomocą opcji -Winline. Jakiej wersji gcc używasz? –
Należy opublikować aktualną wiadomość kompilatora. Czy błąd występuje przy minimalnych plikach źródłowych (tylko wspomniane wiersze bez elementów sugerowanych przez ...)? –
Po zmianie jednej z nazw opcji "OK" na "OK1", dodano pustą funkcję "main" i usunięto '...'; skompilowanie obu plików z dostarczonymi opcjami działa poprawnie. Musisz podać więcej szczegółów, ponieważ przyczyną błędu nie jest tutaj. –