[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: