[C++] collect2: ld gab 1 als Ende-Status zurück ???



  • Compiler : g++
    OS : Linux / Ubuntu
    Terminal Befehl : g++ main.cpp zahl.cpp -o generator
    Compiler Ausgabe :

    /tmp/cchSVIPS.o: In function `genPW(long, int)':
    zahl.cpp:(.text+0x72): multiple definition of `genPW(long, int)'
    /tmp/ccGUK9xM.o:main.cpp:(.text+0x72): first defined here
    collect2: ld gab 1 als Ende-Status zurück
    

    main.cpp

    //main.cpp
    #include <iostream>
    #include "zahl.cpp"
    using namespace std;
    
    int main()
        {
        long int anzahl;
        long int laenge;
        int auswahl;
    
        cout << endl << " # Password Generator version 0.1 by b1lzebub # ";
        cout << endl << " # visit : www.google.dl.am                   # ";
        cout << endl << " #                                            # ";
        cout << endl << " ############################################## ";
        cout << endl << " MENU : ";
        cout << endl << " Zahlen            <1>";
        cout << endl << " Groß Buchstaben   <2>";
        cout << endl << " Klein Buchstaben  <3>";
        cout << endl << " Sonderzeichen     <4>";
        cout << endl << " Mixed             <5>";
        cout << endl << " Programm beenden  <0>";
        cout << endl << " _____________________";
        cout << endl << " Auswahl : ";
        cin  >> auswahl;
        cout << endl << " Maximal ( 2.147.483.647 )\n Wie viele Passwörter sollen generiert werden : ";
        cin >> anzahl;
        cout << endl << " Wie Lang sollen sie sein (0-9): ";
        cin >> laenge;
    
        if(laenge < 0 || laenge > 9)
          {
          cout << endl << " Passwortlaenge zu kurz oder zu Lang (0-9) ";
          }else{
                switch(auswahl)
                {
                case 1 : genPW(laenge,anzahl);
                         break;
                }//switch ende
               }//else ende
    
        cout << endl<< " THanK YoooUUuu for using " << endl << " copyright by b1lzeBuB " << endl << endl << endl;
        }//main ende
    

    zahl.cpp

    #include <iostream>
    #include <fstream>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    
    int genPW( long int m ,long  int n)
        {
    
         int a;
         long int anzahl = n;
         int c;
         long int laenge = m;
         fstream Datei;
    
         Datei.open("PW.txt", ios::out);
         if(!Datei)
           {
           cout << " (PW.txt konnte nicht erstellt / geöffnet werden) " << endl;
           return -1;
           }else{Datei << " PW Generator by b1lzebub :) \n";}
    
         if(laenge == 9){
         laenge = laenge + 100000000;}
    
               else if(laenge == 8){
               laenge = laenge + 10000000;
               srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
               else if(laenge == 7){
               laenge = laenge + 1000000;
               srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
               else if(laenge ==6){
       	   laenge = laenge + 100000;
       	   srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
    	   else if(laenge == 5){
       	   laenge = laenge + 100000;
       	   srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
    	   else if(laenge == 4){
               laenge = laenge + 1000;
               srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
    	   else if(laenge == 3){
       	   laenge = laenge + 100;
       	   srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
    	   else if(laenge ==2){
               laenge = laenge + 10;
       	   srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
     	   else if(laenge == 1){
       	   srand((unsigned)time(NULL));
        for(a=0;a<anzahl;a++)
           {
           c = rand() % laenge +1;      
           Datei << c << endl;
           }}
    
         if(Datei == 0)
                 {
                 cout <<" " << anzahl << " Passwörter wurden erstellt ";
                 return 0;
                 }
    
        }
    

    Ich versteh einfach nicht wo das Problem liegt ?



  • Das Problem ist, dass du die zahl.cpp einmal inkludierst und dann noch einmal die beiden Dateien zusammen kompilierst. Das geht natürlich nicht. Warum? Weil der Präprozessor deinen include-Befehl einfach durch den Inhalt der eigentlichen Datei ersetzt.

    cpp-Dateien sollte man im Übrigen besser niemals nicht inkludieren. Header-Dateien werden inkludiert. 🤡

    Außerdem solltest du mal herausfinden, was Include Guards sind. :xmas1:


Log in to reply