Ich schreibe ein C++ - Programm, bei dem jede Datei einen eigenen Satz globaler Variablendeklarationen hat. Die meisten dieser Dateien verwenden globale Variablen, die in den anderen Dateien mit extern definiert wurden.Mehrere Definitionen Fehler in C++
Hier ist ein Beispiel ähnlich wie mein Programm:
Main.cpp
#include "stdafx.h"
#include <iostream>
#include "Other_File.cpp"
int var1;
int var2;
int main()
{
var1 = 1;
var2 = 2;
otherFunction();
var4 = 4; // From Other_File.cpp
std::cout << var1 << " " << var2 << " " << var3 << " " << var4 << std::endl;
return(0);
}
Other_File.cpp
extern int var1;
extern int var2;
int var3;
int var4;
void otherFunction()
{
var3 = var1 + var2;
var4 = 0;
}
Wenn ich diesen Code in Visual Studio erstellen (Windows), alles läuft gut und die Ausgabe ist korrekt. Aber wenn ich versuche, mit g ++ auf Linux zu bauen erhalte ich folgende Fehlermeldung:
g++ -o Testing Testing.o Other_File.o Other_File.o:(.bss+0x0): multiple definition of
var3' Testing.o:(.bss+0x0): first defined here Other_File.o:(.bss+0x4): multiple definition of
var4' Testing.o:(.bss+0x4): first defined here Other_File.o: In functionotherFunction()': Other_File.cpp:(.text+0x0): multiple definition of
otherFunction()' Testing.o:Testing.cpp:(.text+0x0): first defined here collect2: ld returned 1 exit status make: *** [Testing] Error 1
Ist das, weil ich „darunter“ die andere Datei in meiner Haupt-Datei?
Wenn nicht, was ist das Problem mit meinem Code?
Edit: Dies ist der Inhalt meiner Makefile für g ++:
Testing: Testing.o Other_File.o
g++ -o Testing Testing.o Other_File.o
Testing.o: Testing.cpp
g++ -c -std=c++0x Testing.cpp
Other_File.o: Other_File.cpp
g++ -c -std=c++0x Other_File.cpp
clean:
rm *.o Calculator
Per Konvention sollte man nie eine cpp-Datei in eine andere cpp-Datei aufnehmen. – NathanOliver
Welche Befehlszeile geben Sie an g ++ weiter? – Brian
Ja, durch Einschließen der CPP-Datei endet die Definition zweimal - in der ursprünglichen cpp-Datei und in der Datei, die sie enthält (ich nehme an, Sie kompilieren auch die enthaltene cpp-Datei unabhängig voneinander). ** Thou SHANT enthalten CPP-Dateien **. – SergeyA