error C4430: Fehlender Typspezifizierer



  • Hallo Leute

    Kann mir jemand helfen, immer wenn ich dieses Programm ausführen, möchte kommt immer die Unten Beschriebene Fehlermeldung. Habe in der Hilfe nach geschaut und bin nicht schlau geworden

    Ich benutze Microsoft Visual Studio 2008 und fange gerade erst an mit C++

    #include <stdio.h>

    main ()

    {
    int zahlen[6];
    int i,x,y,merker;

    zahlen[1] = 9;
    zahlen[1] = 10;
    zahlen[1] = 13;
    zahlen[1] = 7;
    zahlen[1] = 3;

    for(x=1;x<=4;x++)
    {
    for(y=x+1;y<=5;y++)
    {
    if(zahlen[x]>zahlen[y])
    {
    merker=zahlen[x];
    zahlen[x]=zahlen[y];
    zahlen[y]=merker;
    }

    }

    }

    }

    error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.



  • 1. bitte benutz die Code-Tags, so kann niemand deinen Code lesen ohne Augenkrebs zu kriegen
    2. bitte poste immer DIE VOLLSTAENDIGE Fehlermeldung, damit wir auch wissen in welcher Zeile der Fehler auftritt (oder weis wenigstens auf die Zeile hin)
    3. es muss

    int main()
    

    heissen, nur "main()" allein ist nicht genug



  • Auch wenn ein paar alte und nicht sonderlich gute C++-Bücher behaupten, dass man der Übersichtlichkeit halber Variablen am Anfang einer Funktion anlegen sollte. Das ist Quatsch & Schwachsinn.

    /* #include <stdio.h> /* Du nutzt doch garkeine Funktion! */ */
    #include <cstddef> // std::size_t
    
    int main()
    {
        int data[] = { 9, 10, 13, 7, 3, 10, 12 };
        const std::size_t size(sizeof(data) / sizeof(data[0]));
    
        for (std::size_t x(1); x < (size - 1); ++x)
        {
            for (std::size_t y(x + 1); y < size; ++y)
            {
                if (data[x] > data[y])
                {
                    // swap data
                    const int temp(data[x]);
                    data[x] = data[y];
                    data[y] = temp;
                }
            }
        }
    }
    

    so sieht es wenigstens ordentlich aus 😉



  • size_t ist nicht vom Namespace std !!



  • Dein gesamter Code sieht eher nach C aus als nach C++. solltest du C schreiben wollen, musst du auch einen C-Compiler benutzen, in dem Fall braucht main meines Wissens auch keinen Rueckgabewert.

    noch ein paar Hinweise (meist fuer C++, einige aber auch fuer C):

    - Nutze die [ cpp ] - Tags hier im Forum, wenn du C/C++-Code postest, das machts gleich viel lesbarer.

    - der Header <stdio.h> ist im C++Standard "abgelehnt" (deprecated), was soviel heisst wie "Nicht mehr benutzen" - und das schon seit zig Jahren. Der Ersatz dafuer ist der header <cstdio>, der die gleichen Funktionen bietet, allerdings im namespace std;
    - statt der <cstdio>-Funktionen kannst du besser (= typsicher, leichter zu lernen, uebersichtlicher im Code) die C++-Streams aus dem header <iostream> nutzen.
    - fuer den Code den du praesentiert hast brauchst du garkeine Ausgabe-Header einzubinden.

    int i,x,y,merker;
    

    Die Variable i benutzt du ueberhaupt nicht, die Variablen x und y erst in den entsprechenden for-Schleifen. Deklariere Variablen (in C++) nahe dem Ort, wo du sie benoetigst, und (in C udn C++) nur wenn du sie auch benoetigst. Also i garnicht, x und y im entsprechenden Schleifenkopf.

    zahlen[1] = 9;
    zahlen[1] = 10;
    zahlen[1] = 13;
    zahlen[1] = 7;
    zahlen[1] = 3;
    

    Hier belegst du 5mal nacheinander den zweiten Wert des Arrays mit einer Zahl. Die anderen Arrayelemente bleiben uninitialisiert, koennen also alles moegliche enthalten.

    for(x=1;x<=4;x++)
    {
    for(y=x+1;y<=5;y++)
    

    Arrays fangen mit dem Index 0 an, ich denke mal dass du deine Schleifen auch darauf erweitern solltest. Es ist Ansichtssache, ob es in der Bedingung dann x<=4 oder x<5 heissen sollte, letzteres wird allgemein haeufiger gesehen, aber wie gesagt, Geschmackssache. Beim Inkrement kann man sich allgemein angewoehnen, das praeinkrement dem postinkrement vorzuziehen, also ++x statt x++. bei Ints macht das keinen Unterschied, aber bei Klassen, die fuer Postinkrement eine temporaere Kopie anlegen muessen, spart man mit Praeinkrement eine Kopie. In diesem Fall aber auhc Geschmackssache.

    merker=zahlen[x];
    zahlen[x]=zahlen[y];
    zahlen[y]=merker;
    

    Genau dieses vertauschen von Variablen das du hier vornimmst ist in std::swap implementiert. Der Code hiesse dann einfach

    std::swap(zahlen[x], zahlen[y]);
    

    und du spars die variable merker.

    for(x=1;x<=4;x++)
    {
      for(y=x+1;y<=5;y++)
      {
        if(zahlen[x]>zahlen[y])
        {
          merker=zahlen[x];
          zahlen[x]=zahlen[y];
          zahlen[y]=merker;
        }
      }
    }
    

    Das Sortieren, das du hier per Hand implementiert hast, kann in C++ mit Mitteln der Standardbibliothek vorgenommen werden. Der zugehoerige Algorithmus heist std::sort() und ist im header <algorithm> zu finden.

    Zusammen dein korrigiertes Programm (gibt bestimmt noch einige weitere Verbesserungen):

    //#include <iostream> //Auskommentiert, da nicht benoetigt
    #include <algorithm> //Fuer std::sort, std::swap waere auch hier zu finden
    
    int main () //int als Rueckgabewert dazu
    
    {
    int zahlen[6];
      //die ints i, x,y, und merker werden nicht mehr benoetigt
    
    zahlen[0] = 9;     //hier die indizes gerichtet
    zahlen[1] = 10;
    zahlen[2] = 13;
    zahlen[3] = 7;
    zahlen[4] = 3;
    zahlen[5] = 1011055; //und dem sechstes Element auch einen Wert zugewiesen
    
    std::sort(zahlen, zahlen+6); //das reicht schon um das Array zu sortieren!!
    }
    


  • wichtig schrieb:

    size_t ist nicht vom Namespace std !!

    Doch, ist es.



  • Danke Leute ihr seid echt Klasse 👍 🙂

    Bekomme es einfach nicht zum laufen.
    Es ist so, ich habe Hausaufgaben 1-8 auf bekommen mit Thema Array , (Habe es auch mal hoch geladen ) wollte die Aufgabe eingegeben damit ich sehen kann wie es Arbeit oder was es macht. Aber das Problem ist die Fehlermeldung (Habe auch dazu ein Bild hochgeladen) Ich weiß einfach nicht was ich machen soll.

    Ps: Wenn Jemand lust hat. ich muss die Aufgaben 6,7,8 noch machen vielleicht kann mir einern ein Paar tipps mit geben.

    Aufgabe
    http://img169.imagevenue.com/img.php?image=35742_Vorlage_122_1174lo.jpg

    Fehlermeldung
    http://img150.imagevenue.com/img.php?image=35736_Foto_aufgabe_122_912lo.jpg



  • Mal ehrlich. Du hast nicht gelesen was wir geschrieben haben oder? Das ist die gleiche Fehlermeldung wie oben, aus dem gleichen Grund wie oben. Das einzige was du geändert hast, ist das include, der Rest ist noch genauso fehlerhaft. Beheb doch erstmal die anderen Fehler, bevor du nach weiterer Hilfe fragst. Niemand hat Lust sich hier zu wiederholen, erst recht nicht, wenn du keine Anstalten zeigst das umzusetzen was dir vorgeschlagen wird.


Anmelden zum Antworten