g++: Fehler beim linken

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • g++: Fehler beim linken

    Hallo,
    ich habe eine kleine Anwendung in C++ programmiert, die ich auch compilen kann, aber beim linken kriege ich ein Fehler und zwar:

    Quellcode

    1. g++ main.o klasse.o -v -arch x86_64
    2. Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
    3. Target: x86_64-apple-darwin13.1.0
    4. Thread model: posix
    5. "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.9.0 -o a.out main.o klasse.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.osx.a
    6. duplicate symbol __Z2cbv in:
    7. main.o
    8. klasse.o
    9. ld: 1 duplicate symbol for architecture x86_64
    10. clang: error: linker command failed with exit code 1 (use -v to see invocation)
    11. make: *** [test] Error 1
    Alles anzeigen

    Die beiden Datein heißen main.o (besteht aus main.cpp) und klasse.cpp (besteht aus klasse.cpp und klasse.h). Kann mir wer helfen?

    LG
  • main.cpp

    C-Quellcode

    1. #include <iostream>
    2. #include "klasse.h"
    3. using namespace std;
    4. int main(void)
    5. {
    6. cout << "Hello, World!\n";
    7. cb();
    8. return 0;
    9. }


    klasse.cpp

    C-Quellcode

    1. #include <iostream>
    2. void cb(void)
    3. {
    4. std::cout << "Hello World aus einer anderen Datei";
    5. }


    klasse.h

    C-Quellcode

    1. #ifndef FunktionTest_klasse_h
    2. #define FunktionTest_klasse_h
    3. #include "klasse.cpp"
    4. void cb(void);
    5. #endif

    Das ist der Quellcode
  • in klasse.cpp muss ein #include auf klasse.h, nicht andersrum. In der jetzigen Form included main.cpp klasse.h und die wiederum klasse.cpp, also wird die Funktion cp sowohl in main.cpp als auch in klasse.cpp implementiert.

    Edit: Gritsch war eine Sekunde schneller - ich tippe wohl wirklich zu langsam...
    Multigrad - 360°-Produktfotografie für den Mac
  • mattik schrieb:

    in klasse.cpp muss ein #include auf klasse.h, nicht andersrum. In der jetzigen Form included main.cpp klasse.h und die wiederum klasse.cpp, also wird die Funktion cp sowohl in main.cpp als auch in klasse.cpp implementiert.

    Edit: Gritsch war eine Sekunde schneller - ich tippe wohl wirklich zu langsam...


    1 minute nicht sekunde - aber doch waren 12 minuten zwischen seinem posting und unserem. also lags wohl nicht am tippen (hoffe ich für dich ;-))