Problem: Nicht-statische Funktion Definition global-Namespace im Header
Das Problem ist, dass Sie definieren strCpy in der Kopfzeile, und fügen Sie es mehrmals für Honda.obj und Car.obj ein, da Sie str.h in den beiden entsprechenden .cpp-Dateien enthalten.
Da die Funktion nicht als statisch deklariert ist, wird sie nicht einmal instanziiert, sondern für jede Aufnahme von str.h in jeder der .OBJ separat und der Linker trifft auf mehrere Definitionen von strCpy().
Lösung 1: statische Mark strcpy
#include<cstring>
static void strCpy(char *& Source, char *& Dest)
{
for (int i = 0; i < strlen(Source); i++)
{
Dest[i] = Source[i];
}
Dest[strlen(Source)] = '\0';
}
Lösung 2: Separate Erklärung und Definition über .h und CPP-Dateien
// str.h
# pragma once
void strCpy(char *& Source, char *& Dest);
// str.cpp
#include "str.h"
void strCpy(char *& Source, char *& Dest)
{
for (int i = 0; i < strlen(Source); i++)
{
Dest[i] = Source[i];
}
Dest[strlen(Source)] = '\0';
}
In beiden Fällen:
#pragma once
oder hinzufügen Nicht-VS include-guard #ifndef <key> #define <key> // code #endif // <key>
Vermutlich vermissen Sie einen Kopf Wächter eingeschlossen bedeutet, dass Sie strCpy in mehrere Objektdateien geschrieben haben – donkopotamus
@donkopotamus würde ein Header Guard das nicht verhindern, eine Inline-Funktion oder eine separate Definition würde. – Quentin