2017-02-06 3 views
2

Also habe ich einige Anfänger Herausforderungen gemacht und wollte meinen Code ändern, das war, was ich zuerst gemacht habe.C++: "mehrere Definition von 'mainCRTStartup'" Fehler usw.

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

int random; 
int guess; 
int num_guess = 1; 

int main(){ 
    srand(time(NULL)); 
    random = rand() % 100 + 1; 

    std::cout << "Try to guess my number between 1 and 100." << std::endl; 
    std::cin >> guess; 

    while(guess > random){ 
     std::cout << "Sorry too high but i'll give you another try." <<  std::endl; 
     std::cin >> guess; 
     num_guess += 1; 
    } 

    while(guess < random){ 
     std::cout << "Sorry too low but i'll give you another try." << std::endl; 
     std::cin >> guess; 
     num_guess += 1; 
    } 

    if(guess = random){ 
     std::cout << "WOW! Congratulations you actually got it, you did use " << num_guess << " tries tho." << std::endl; 
    } 


    return(0); 
} 

Es soll eine Zufallszahl zwischen 1 und 100 generieren, und dann raten Sie, welche Zahl es ist. Aber dann kopierte ich diesen Code in eine andere Datei unter dem gleichen Projekt, weil ich das in der Schule mache, also wollte ich alle verschiedenen Versionen meines Codes für Dokumentationszwecke. Aber als ich begann, den neuen Code zu schreiben, wo das Programm soll eine Zahl erraten Sie es geben zwischen 1 und 100.

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

int number; 
int guess = 100; 
int num_guess = 1; 

int main(){ 
    std::cout << "Please enter any number between 1 and 100" << std::endl; 
    std::cin >> number; 
    if(number > 100 && number < 1){ 
     std::cout << "Enter a valid number" << std::endl; 
     std::cin >> number; 
    } 

    srand(time(NULL)); 
    guess = rand() % guess + 1; 


    return(0); 
} 

Ich löschte den alten Code von main.cpp und schrieb dies statt, aber als ich versuchte, um sie auszuführen bekam ich diese Fehlermeldung:

  • mehr Definition von ` '
  • mehr Definition von` WinMainCRTStartup' mainCRTStartup
  • mehr Definition von `atexit‘
  • mu ltiple Definition von `_onexit '
  • mehr Definition von` __gcc_register_frame'
  • mehr Definition von `__gcc_deregister_frame‘
  • undefined reference to `_Jv_RegisterClasses' |
+1

Sie haben mehrere Hauptfunktionen definiert. Wie Linker einen Einstiegspunkt finden müssen? – ilotXXI

+1

Wenn die Dateien zum selben Projekt gehören, versucht der Compiler, beide in die gleiche ausführbare Datei aufzunehmen. Und dann wird es zwei 'main()' -Funktionen geben, die scheinbar alles in zwei hineinziehen. Also einfach ein neues Projekt erstellen. –

+0

Wird nicht durch mehrere main() - Funktionen verursacht. Sie verknüpfen die C-Laufzeitbibliothek mehr als einmal. Keine Brotkrumen in der Frage zu erraten, wie das hätte passieren können. Ein neues Projekt zu erstellen, statt zu versuchen, ein altes wiederzuverwenden, wäre die offensichtlichste Alternative, um weiter zu kommen. –

Antwort

0

Raten Sie haben Ihre alte Datei nicht aus dem Projekt ausgeschlossen. In diesem Fall erfüllt Linker zwei main Funktionen und weiß nicht, was zu verwenden ist. Mögliche Wege, es zu lösen:

  1. nicht verwendete Datei aus dem Projekt ausschließen;
  2. Kommentar aus alter Version;
  3. Verwendung bedingte Kompilierung:

    #ifdef OLD_VER 
    // main1 
    ... 
    #else 
    // main2 
    ... 
    #endif 
    
  4. ein neues Projekt erstellen;
  5. verwenden Versionskontrollsysteme.

Die ersten 3 Methoden werden nicht für eine lange Verwendung empfohlen. Der letzte ist ein guter Punkt (der beste Punkt, denke ich), aber es kann elementares VCS-Lernen erfordern.

Verwandte Themen