So beheben Sie Fehler mit mehreren Definitionen einer Funktion in C ++

So beheben Sie Fehler mit mehreren Definitionen einer Funktion in C ++
In C ++ tritt der Fehler mit mehreren Definition auf, wenn eine Funktion oder eine Variable in verschiedenen Quelldateien mehrere Definitionen aufweist, was zu Fehlern während des Verknüpfungsprozesses führt. Dieser Leitfaden bietet ein Verständnis für die Ursache dieses Fehlers und bietet Lösungen zur Behebung dieses Problems.

Multiple Definitionsfehler in C++

Wenn eine Funktion oder Variable in verschiedenen Quelldateien mehrere Definitionen aufweist, führt die Verknüpfungsverfahren zu einem Fehler mit mehreren Definitionen. Um die Einheitlichkeit und Genauigkeit des Programms zu gewährleisten, erwartet der Linker nur eine Definition in allen Quelldateien.

Normalerweise sieht der Fehler so aus:

Fehler: Multiple Definition von 'function_name' '

Für jeden C ++ - Entwickler ist es von entscheidender Bedeutung, die Ursache dieses Fehlers zu verstehen und zu wissen, wie man ihn behebt.

Faktoren, die zu mehreren Definitionsfehlern in C führen++

Mehrere Definitionsfehler können aus mehreren Gründen in Ihrem C ++ - Code auftreten, wie nachstehend erläutert wird:

1: Mehrere Definitionen derselben Funktion oder Variablen in einer Quelldatei

Wenn Sie in derselben Quelldatei versehentlich dieselbe Funktion oder Variable mehrmals definieren, stoßen Sie auf einen Fehler mit mehreren Definitionen.

2: Funktion oder Variable in einer Header -Datei definiert

Wenn eine Funktion oder Variable in einer Header -Datei deklariert wird und diese Header -Datei durch zahlreiche Quelldateien referenziert wird, enthält jede Quelldatei mit einem Header auch eine Definition für die Funktion oder Variable. Dies erzeugt den Fehler mehrerer Definitionen.

3: In derselben Quelldatei die gleiche Funktion oder Variable mehrmals deklarieren

Wenn Sie in derselben Quelldatei versehentlich dieselbe Funktion oder Variable mehrmals deklarieren, werden Sie beim Verknüpfen auf einen Fehler mit mehreren Definitionen stoßen. Dies liegt daran, dass der Linker nur eine Definition für jede Funktion oder Variable über alle Quelldateien erwartet.

Beheben Sie Fehler mit mehreren Definitionen einer Funktion in C++

Die folgenden Techniken können verwendet werden, um mehrere Definitionsfehler in C ++ zu beheben:

1: Verwenden Sie Funktionsprototypen und externe Variablen

Eine Technik zur Behebung mehrerer Definitionsfehler in C ++ besteht darin, eine Funktion oder Variable unter Verwendung von Funktionsprototypen oder externen Variablen zu deklarieren, anstatt sie in einer Header -Datei anzugeben. Auf diese Weise wird die Funktion oder Variable nur einmal in der Quelldatei definiert, wodurch der Fehler vermieden wird.

Das Folgende ist eine Code -Syntax für die obige Lösung.

// Header.H
#ifndef Header_h
#define Header_h
extern int sub (int num1, int num2);
#endif
// Quelle.CPP
#include "Header.H"
int sub (int num1, int num2)

return num1 - num2;

In der obigen Syntax die Funktion Sub wird in der Header -Datei mit dem externen Schlüsselwort deklariert, das anzeigt, dass sie an anderer Stelle definiert ist. Die tatsächliche Definition wird dann in der Quelldatei angegeben. Der #ifndef Header_h Und #define Header_h Zu den Zeilen gehören Wächter, die sicherstellen, dass die Header -Datei nur einmal in derselben Quelldatei enthalten ist, um die Neudefinition der Funktion zu vermeiden.

2: Verwenden Sie statische Funktionen oder Variablen

Wenn eine Funktion oder Variable nur in einer Quelldatei verwendet wird, deklarieren Sie sie als statisch. Dies beschränkt seinen Umfang auf die aktuelle Quelldatei, und der Linker wird ihn während der Verknüpfung nicht berücksichtigen. Auf diese Weise stellen Sie sicher, dass die Funktion oder Variable nur einmal definiert ist und nicht von anderen Dateien aus zugegriffen werden kann.

Die Deklination einer Funktion oder Variablen als statische Einschränkung des Rahmens auf die aktuelle Quelldatei und stellt sicher, dass sie nur einmal definiert ist, sodass Ihr Code modularer und leichter beibehalten wird

Wenn Sie in verschiedenen Dateien mehrere Funktionen haben, können Sie diese in jedem anderen Projekt problemlos verwenden.

Betrachten Sie die folgende Code -Syntax als Beispiel:

// Funktionen.CPP
static int einmal_used_function ()

//…

In der obigen Syntax die "statisch" Das Schlüsselwort wird verwendet, um eine Funktion namens zu definieren "Once_used_function". Diese Funktion kann nur in derselben Quelldatei zugegriffen werden und kann nicht von anderen Dateien zugegriffen werden, die mit dieser Quelldatei verknüpft sind. Dies stellt sicher, dass die Funktion nur einmal definiert ist und nicht aus anderen Teilen des Programms aus versehentlich geändert oder zugegriffen werden kann.

3: Inline -Funktionen implementieren

Erwägen Sie, Inline -Funktionen für häufig genannte, kurze Funktionen zu verwenden. Dadurch wird die Notwendigkeit einer separaten Definition beseitigt, da der Compiler den Funktionsaufruf direkt durch den Code der Funktion ersetzen kann.

Betrachten Sie die folgende Code -Syntax als Beispiel:

// Header.H
Inline int sub (int num1, int num2)

return num1 - num2;

In der obigen Syntax wird das Schlüsselwort "Inline" verwendet. Durch die Definition dieser Funktion als Inline ersetzt der Compiler den Funktionsaufruf zum tatsächlichen Funktionscode zum Kompilieren.

4: Verwenden Sie Namespaces

Durch die Verwendung von Namespaces können Sie verhindern, dass der Linker mehrere Definitionen mit demselben Namen findet. Die Namespaces bieten eine Möglichkeit zu gruppenbezogenen Erklärungen und Definitionen in einem einzigen namens Scope, so.

Betrachten Sie die folgende Code -Syntax als Beispiel:

// source_code_1.CPP
Namespace Source_Code_1

int sub (int num1, int num2)

return num1 - num2;


// source_code_2.CPP
Namespace Source_Code_2

int sub (int num1, int num2)

return num1 - num2;

In der obigen Syntax haben zwei verschiedene Quelldateien eine Funktion namens "Sub" mit derselben Signatur. Um Konflikte zu verhindern, wird jede Funktion in einem separaten Namespace definiert: "Source_Code_1" und "Source_Code_2". Auf diese Weise können auf die Funktionen aus ihren jeweiligen Namespaces zugegriffen werden, ohne Konflikte zu nennen. Wenn Sie die Funktion von anderen Teilen der Codebasis aufrufen, müssen Sie den Namespace angeben, um anzugeben, welche Version der Funktion Sie aufrufen möchten.

Abschluss

Wenn Programmierer und Entwickler dieselbe Funktion zweimal definieren und verwenden, wird das System verwirrt, was zum typischen Fehler mehrerer Definitionen von C ++ - Funktionen führt. Da C ++ unerwartete Fehler und Defekte in Dateien zeigen kann, die anscheinend korrekt sind, genießen Entwickler eine dynamische Erfahrung damit, damit zu arbeiten. Daher erläuterte dieser Leitfaden die mehrfachen Definitionen des Funktionsfehlers in C ++, lieferte die Lösungssyntax und debuggierte den Fehler.