multiple definition of `helper_function()` (defined in header without 'inline') – C MULTIPLE_DEF_MISSING_INLINE

MULTIPLE_DEF_MISSING_INLINE

Scrivere il corpo di una funzione libera direttamente all'interno di un file header .h senza la parola chiave 'inline' fa sì che ogni file .cpp che include l'header generi una definizione forte del simbolo violando la One Definition Rule (ODR).

Cosa significa questo errore?

Scrivere il corpo di una funzione libera direttamente all'interno di un file header .h senza la parola chiave 'inline' fa sì che ogni file .cpp che include l'header generi una definizione forte del simbolo violando la One Definition Rule (ODR).

Messaggio originale

multiple definition of `helper_function()` (defined in header without 'inline')

Contesto e parole chiave

Alias

  • multiple definition of function defined in header C++

Messaggi alternativi

  • definizione multipla di funzione definita in header senza inline

Prodotti

  • C++ Compiler (GCC g++ / Clang++ / MSVC)

Piattaforme

  • Linux
  • macOS
  • Windows

Parole chiave

  • c-plus-plus
  • cpp
  • cpp.linker.multiple-definition-of-inline-function-missing-inline
  • errore-cpp-multiple-definition-missing-inline
  • Linker e Simboli C++

Cause possibili

Causa tecnica per Errore C++ Linker: multiple definition of function (Funzione in Header Priva di 'inline')

Scrivere il corpo di una funzione libera direttamente all'interno di un file header .h senza la parola chiave 'inline' fa sì che ogni file .cpp che include l'header generi una definizione forte del simbolo violando la One Definition Rule (ODR).

molto comune

Diagnosi

Diagnostica di compilazione e memoria per Errore C++ Linker: multiple definition of function (Funzione in Header Priva di 'inline')

Compilare con lo standard appropriato (-std=c++20 o c++23) e attivare gli Address e Undefined Behavior Sanitizer.

Come leggere il risultato. Identifica errori di metaprogrammazione, violazioni di memoria o eccezioni non gestite.

terminal
g++ -std=c++20 -Wall -Wextra -fsanitize=address,undefined -g main.cpp -o app

Risoluzione

Risoluzione standard per Errore C++ Linker: multiple definition of function (Funzione in Header Priva di 'inline')

Difficoltà: mediaRischio: basso

Applicare la correzione al codice C++ secondo gli idiomi moderni (RAII, smart pointer, concetti).

  1. Ispezionare la riga segnalata dal compilatore o lo stack trace di std::terminate
  2. Risolvere l'ambiguità nei template, firme di funzioni o gestione dei lock
  3. Ricompilare ed eseguire i test unitari con ThreadSanitizer / Valgrind
terminal
g++ -std=c++20 -Wall -Wextra main.cpp -o app

Domande frequenti

Come risolvere l'errore Errore C++ Linker: multiple definition of function (Funzione in Header Priva di 'inline') in C++?

Scrivere il corpo di una funzione libera direttamente all'interno di un file header .h senza la parola chiave 'inline' fa sì che ogni file .cpp che include l'header generi una definizione forte del simbolo violando la One Definition Rule (ODR).

Approfondimenti

Schede correlate