C Var



  • Hallo, bin gerade dabei C zu lernen und bitte Euch um Hilfe

    Buildprotokoll Erstellen wurde gestartet: Projekt: "Projekt_Lernen", Konfiguration: "Release|Win32"
    Befehlszeilen Die temporäre Datei "c:\Dokumente und Einstellungen\mamaundpapa\Eigene Dateien\Visual Studio 2005\Projects\Projekt_Lernen\Projekt_Lernen\Release\RSP0000152332684.rsp" wird erstellt. Inhalt:
    [
    /O2 /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Fo"Release\" /Fd"Release\vc80.pdb" /W3 /c /Wp64 /Zi /TC ".\var1.c"
    ]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\mamaundpapa\Eigene Dateien\Visual Studio 2005\Projects\Projekt_Lernen\Projekt_Lernen\Release\RSP0000152332684.rsp" /nologo /errorReport:prompt"Die temporäre Datei "c:\Dokumente und Einstellungen\mamaundpapa\Eigene Dateien\Visual Studio 2005\Projects\Projekt_Lernen\Projekt_Lernen\Release\RSP0000162332684.rsp" wird erstellt. Inhalt:
    [
    /OUT:"C:\Dokumente und Einstellungen\mamaundpapa\Eigene Dateien\Visual Studio 2005\Projects\Projekt_Lernen\Release\Projekt_Lernen.exe" /INCREMENTAL:NO /MANIFEST /MANIFESTFILE:"Release\Projekt_Lernen.exe.intermediate.manifest" /DEBUG /PDB:"c:\dokumente und einstellungen\mamaundpapa\eigene dateien\visual studio 2005\projects\projekt_lernen\release\Projekt_Lernen.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 kernel32.lib

    ".\release\test.obj"

    ".\release\Variabel.obj"

    ".\release\var.obj"

    ".\release\var1.obj"
    ]Erstellen der Befehlszeile "link.exe @"c:\Dokumente und Einstellungen\mamaundpapa\Eigene Dateien\Visual Studio 2005\Projects\Projekt_Lernen\Projekt_Lernen\Release\RSP0000162332684.rsp" /NOLOGO /ERRORREPORT:PROMPT" Ausgabefenster Kompilieren...
    var1.c
    Verknüpfen...
    Variabel.obj : error LNK2005: _main ist bereits in test.obj definiert.
    var.obj : error LNK2005: _main ist bereits in test.obj definiert.
    var1.obj : error LNK2005: _main ist bereits in test.obj definiert.
    C:\Dokumente und Einstellungen\mamaundpapa\Eigene Dateien\Visual Studio 2005\Projects\Projekt_Lernen\Release\Projekt_Lernen.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
    Ergebnisse Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\mamaundpapa\Eigene Dateien\Visual Studio 2005\Projects\Projekt_Lernen\Projekt_Lernen\Release\BuildLog.htm" gespeichert.
    Projekt_Lernen - 4 Fehler, 0 Warnung(en)

    /* Beispiel zum Zuweisen und Ausgeben von Werten */
    
    #include <stdio.h>
    
    int main()
    {
    
        short s_zahl = 123;
    	int i_zahl = 12345;
    	long l_zahl = 1234567;
    
    	printf("Der Wert von von s_zahl berträgt: %d\n", s_zahl);
    	printf("Der Wert von von i_zahl berträgt: %d\n", i_zahl);
    	printf("Der Wert von von l_zahl berträgt: %ld\n", l_zahl);
    
    	return 0;
    
    }
    

    Warum klappt das nicht?
    Danke im Voraus.



  • Kompilieren...
    var1.c
    Verknüpfen...
    Variabel.obj : error LNK2005: _main ist bereits in test.obj definiert.
    var.obj : error LNK2005: _main ist bereits in test.obj definiert.
    var1.obj : error LNK2005: _main ist bereits in test.obj definiert.

    Und warum will der da was verknüpfen? oO



  • Du hat in test.c od. test.cpp oder in einem von der betreffenden Datei inkludierten Header main() noch einmal definiert.



  • Also habe ein Projekt und dadrin:

    test.c

    /********************************
    *          hallo.c             *
    ********************************/
    
    #include <stdio.h>
    #include <stdlib.h>  // für: system("PAUSE")
    
    int main()  // function, muss immer enthalten sein!
    {  //Anweisungsblock
    
    	printf("Hallo Welt\n");  // Fügt Buchstaben in die Konsole ein
    	system("PAUSE");  // Programm wird nicht direkt beendet
    	return 0;  // Signal wird an int main() zurück gesendet. Immer nötig!
    
    }  //Anweisungsblock
    

    variabel.c

    /* Beispiel zu Variablendeklaration */
    
    #include <stdio.h>
    
    int main()
    
    {
    
    	int var;
    	return 0;
    
    }
    

    var1.c

    /* Beispiel zum Zuweisen und Ausgeben von Werten */
    
    #include <stdio.h>
    
    int main()
    {
    
        short s_zahl = 123;
    	int i_zahl = 12345;
    	long l_zahl = 1234567;
    
    	printf("Der Wert von von s_zahl berträgt: %d\n", s_zahl);
    	printf("Der Wert von von i_zahl berträgt: %d\n", i_zahl);
    	printf("Der Wert von von l_zahl berträgt: %ld\n", l_zahl);
    
    	return 0;
    
    }
    

    Was soll Ich jetzt genau tun?

    Ich verstehe auch nicht was die eine Datei mit der anderen zu tun haben soll???



  • 🙂 Du hast die Dateien alle in Deinem Projekt; deshalb weiß der Linker nicht welches der drei main() denn nun nach dem Laden des Programmes anzuspringen wäre.

    Btw hast Du vorher vielleicht mit Python oder Java gearbeitet?



  • Gast++ schrieb:

    🙂 Du hast die Dateien alle in Deinem Projekt; deshalb weiß der Linker nicht welches der drei main() denn nun nach dem Laden des Programmes anzuspringen wäre.

    Btw hast Du vorher vielleicht mit Python oder Java gearbeitet?

    Vielen Dank! Ich probiere es direkt ein mal aus.

    Nein habe Ich nicht, ist das Wichtig?



  • Micha__** schrieb:

    Nein habe Ich nicht, ist das Wichtig?

    Ich wollte auf einen Unterschied zwischen den beiden Sprachen und C/C++ hinaus; bei z.B. Python hat man nämlich ein und nur ein Startmodul und nur dessen main-Routine wird ausgeführt; bei C/C++ erfüllt diese Aufgabe eben main() - egal wo's steht.



  • Super Danke, es klappt! Habe jetzt halt eine neues Projekt erstellt. Ist aber ein bisschen doof für alles immer ein neues Projekt zu erstellen. Gibt es keine andere Alternative?



  • Micha__** schrieb:

    Super Danke, es klappt! Habe jetzt halt eine neues Projekt erstellt. Ist aber ein bisschen doof für alles immer ein neues Projekt zu erstellen. Gibt es keine andere Alternative?

    Benenn die überzähligen main-Routinen sinnvoll um; schaff Deklarationen für die so definierten Funktionen, am besten in Headern, inkludiere dies ggf. in der Datei in der main() nun wirklich stehen soll und ruf die Funktionen von main() aus auf.

    Viel Erfolg!

    Grüsse

    *this



  • Könntest du mir das bitte Schritt für Schritt erklären, habe erst heute mit C angefangen 🙂



  • Die Zeit dafür hab ich leider nicht.

    => Google: C, C++, Modularisierung, Header, Deklarationen, Definitionen, Präprozessor, Linker



  • Habe etwas gefunden womit es funktioniert aber auch nch ein bisschen umständlich, aber wenigstens muss ich nciht mehrere projekte öffnen


Anmelden zum Antworten