2017-03-17 2 views
0

Ich versuche, eine einfache Klassen program zu machen, aber ich bekomme einen seltsamen Fehler, von dem, was ich sehe, ist es nicht das Problem mit dem Code, sondern etwas mit dem Clion.Clion Compiler Fehler während des Aufbaus

CMakeFiles\Assignment_4.dir/objects.a(Box.cpp.obj):Box.cpp:(.bss+0x0): multiple definition of `Box::objectCount' 
CMakeFiles\Assignment_4.dir/objects.a(Q_1.cpp.obj):Q_1.cpp:(.bss+0x0): first defined here 
collect2.exe: error: ld returned 1 exit status 
mingw32-make.exe[3]: *** [Assignment_4.exe] Error 1 
CMakeFiles\Assignment_4.dir\build.make:147: recipe for target 'Assignment_4.exe' failed 
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/Assignment_4.dir/all' failed 
mingw32-make.exe[2]: *** [CMakeFiles/Assignment_4.dir/all] Error 2 
mingw32-make.exe[1]: *** [CMakeFiles/Assignment_4.dir/rule] Error 2 
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/Assignment_4.dir/rule' failed 
mingw32-make.exe: *** [Assignment_4] Error 2 
Makefile:117: recipe for target 'Assignment_4' failed 

Auch beim Kompilieren direkt mit g ++ I mehrere Objekt Definition Fehler. Es hat früher im Visual Studio funktioniert.

C:\Users\fsa\CLionProjects\McMaster\Assignment_4>g++ Q_1.cpp clock.cpp box.cpp -o Q1.exe 
C:\Users\fsa\AppData\Local\Temp\ccmD1R6t.o:box.cpp:(.bss+0x0): multiple definition of `Box::objectCount' 
C:\Users\fsa\AppData\Local\Temp\cc0nh7LU.o:Q_1.cpp:(.bss+0x0): first defined here 
collect2.exe: error: ld returned 1 exit status 
+0

Ich kompilierte mit dem falschen Befehl. Es sollte 'g ++ Q_1.cpp clock.cpp box.cpp -o Q1.exe' –

+0

Also, kompiliert es jetzt erfolgreich? – GigaRohan

+0

@GigaRohan Nein, aber es hat die Fehlerausgabe geändert. Bevor meine Klassendateien überhaupt kompiliert wurden. Jetzt habe ich 'mehrere Definition von' Box :: objectCount'' Fehler. Ich gehe den Code durch, um die Ursache zu sehen. –

Antwort

0

Das Problem ist, dass int Box::objectCount = 0; im Header ist. So erscheint es in mehreren Kompilationseinheiten (Q1.o und Box.o). Es sollte in die Box.cpp verschoben werden.

+0

Danke, das hat es behoben. Aber wirkt sich die Platzierung der Linie auf die Counter-Funktion aus, weil mein Counter bei 0 bleibt, obwohl in main() 2 Box-Objekte erzeugt werden. –

+0

Ich glaube nicht, dass das wichtig ist, aber normalerweise würde es unterhalb der Header-Include in der CPP-Datei platziert werden. Wenn Sie das Problem weiterhin haben, würde ich sagen, dass Sie mit einem Debugger durch den Code gehen müssen, um zu sehen, was passiert. Eine Randnotiz: 'objectCount' sollte in Ihrem Fall privat sein. – GigaRohan

Verwandte Themen