Anfänger warum funktioniert das BSP nicht.



  • Wie gesagt das Problem besteht dahingegend, dass er sort als Fehler sieht.
    Link zum Foto.
    Er zeigt mir nur die Fehlermeldung und die Frage ist warum^^.

    Benutze seit gestern MVS 2015, da der Header bei Dev C++ garnicht funktioniert hat. Vielleicht kannst du mir noch sagen welchen Programm du nutzt.



  • evev schrieb:

    Wie gesagt das Problem besteht dahingegend, dass er sort als Problem sieht.

    Und Du hast den Header eingebunden, den ich oben verlinkt habe.?

    evev schrieb:

    Er zeigt mir nur die Fehlermeldung und die Frage ist warum^^.

    Du hast C++11, besser noch C++14 Unterstützung eingeschaltet?

    evev schrieb:

    Viellicht kannst du mir noch sagen welchen Programm du nutzt.

    gcc 4.9.3 unter Linux.


  • Mod

    dachschaden schrieb:

    Und geh weg mit deinen Bilddateien.

    Für gewöhnlich zutreffend, in diesem speziellen Fall evtl. hilfreich um herauszufinden, wo das Problem liegen könnte.
    Nachdem geklärt wurde, was std_lib_facilities.h ist, stellen wir fest:
    1. der Compiler findet die sort-Deklarationen im Namensraum std, obwohl keine Standardheader direkt inkludiert wurden. Die Standardheader sind also offenbar durch std_lib_facilities.h bekanntgemacht worden. Andererseits:
    2. der Compiler findet die zusätzlichen sort-Definitionen in std_lib_facilities.h (ziemlich am Ende) nicht.
    Wie kann das sein? Zwei mögliche Erklärungen fallen mir ein:
    1. std_lib_facilities.h wurde nicht vollständig übernommen, und es fehlen die entsprechenden Definitionen. Oder
    2. Anhand der Explorerliste is erkennbar, dass dieses Projekt das (für so simple Projekte völlig unangebrachte) Precompiled-header-Feature von Visual C++ verwendet. Andererseits fehlt dann ein #include "stdafx.h" - ich kann mich also irren. Jedenfalls ist fürs Lernen (und eigentlich generell) zweckmäßig, auf Derartiges zu verzichten, und grunsätzlich mit leeren (Checkbox beim Erstellen) Projekten zu beginnen.



  • Erstmal danke für eure Hilfe.

    Der Header wurde übernommen und meines Erachtens richtig eingebunden. Da er vorher dort immer einen Fehler gesetzt hatte. Auch musste man diesen downloaden und in der Projektmappe ablegen, somit soll auch hierbei kein Fehler enstanden sein.

    C++ 14 Einstellung suche ich vergebens, bin aber auf der Suche

    #include "stdafx.h" das Problem besteht leider weiterhin.


  • Mod

    evev schrieb:

    #include "stdafx.h" das Problem besteht leider weiterhin.

    Das ist kein deutscher Satz.
    Wenn ausgedrückt werden soll, dass du ein

    #include "stdafx.h"
    

    eingefügt hast: das habe ich nicht empfohlen.



  • Ja habe das so übernommen. War dann ein Missverständnis.
    Gibt es eine Möglichkeit ohne den Header, damit das Beispiel läuft? Das hält mich schon seit gestern auf^^.

    Vielleicht ist auch die Einbindung falsch. Um den Fehler auszuschließen, könntet ihr mir das nocheinmal schneller erklären? Soll man hierfür eine neue Datei anlegen und das alles Einfügen? Wie gesagt habe das geladen und in den Ordner gepackt, vielleicht liegt dort ein Problem.



  • Bist Du sicher, dass Deine std_lib_facilities.h die ist, die hier verlinkt ist?

    Insbesondere mit diesen Zeilen:

    template<typename C>
            // requires Container<C>()
    void sort(C& c)
    {
            std::sort(c.begin(), c.end());
    }
    


  • Ja habe das nochmal geändert und neu eingebunden. Denke der download war einfach nur falsch.
    Deine Zeile + die Zeile danach

    // requires Container<C>()
    void sort(C& c)
    {
    	std::sort(c.begin(), c.end());
    }
    
    template<typename C, typename Pred>
    // requires Container<C>() && Binary_Predicate<Value_type<C>>()
    void sort(C& c, Pred p)
    {
    	std::sort(c.begin(), c.end(), p);
    }
    
    }
    

    Vielleicht noch das resultierende Problem daraus:
    Also ich gebe nun die Komma zahlen ein beende die Eingabe mit diesem Zeichen | wie es im Buch steht. (Das Zeichen soll die Eingabe unterbinden und nur die doubles einlesen, man kann auch was anderes nehmen) Nur gibt er mir keine Cout ausgabe, sondern beendet das Programm.

    #include "std_lib_facilities.h"
    #include "stdafx.h"
    #include <cstdio>
    using namespace std;
    
    // compute mean and median temperatures
    // compute mean and median temperatures
    int main()
    {
    	cout << "gebe eine Zahl ein";
    	vector<double> temps; // temperatures
    	for (double temp; cin >> temp; ) // read into temp
    		temps.push_back(temp); // put temp into vector
    							   // compute mean temperature:
    	double sum = 0;
    	for (int x : temps) sum += x;
    	cout << "Average temperature: " << sum / temps.size() << '\n';
    	// compute median temperature:
    	sort(temps); // sort temperatures
    	cout << "Median temperature: " << temps[temps.size() / 2] << '\n';
    	return 0;
    	keep_window_open(); // <---gelesen und übernommen
    }
    

    Es geht darum Temperaturen einzulesen und auszugeben wie 2.3 4.5 6.2 4.1 usw.



  • Was sollen deine Meinung nach diese beiden Zeilen

    return 0;
    keep_window_open(); // <---gelesen und übernommen
    

    machen?



  • Th69 schrieb:

    Was sollen deine Meinung nach diese beiden Zeilen

    return 0;
    keep_window_open(); // <---gelesen und übernommen
    

    machen?

    keep_window_open; soll das Fenster davon abhalten, sich gleich zu schließen nach dem durchlauf
    return 0; habe es einfach ausprobiert ob es was bringt

    habe das jetzt einfach mal so gelöst..

    ---------
    Man muss bei visual Studio Strg + F5 drücken um die Console offen zu halten. Somit funktioniert jetzt alles. Es hat zwar gedauert,aber es klappt 👍
    Danke für eure Hilfe.



  • du weißt, dass sämtliche anweisungen nach return niemals erreicht werden?



  • nein. Woher auch^^, muss es erstmal alles ausprobieren.

    #include "std_lib_facilities.h"
    
    #include <cstdio>
    using namespace std;
    
    // compute mean and median temperatures
    // compute mean and median temperatures
    int main()
    {
    
    	cout << "gebe eine Zahl ein";
    
    	vector<double> temps; // temperatures
    	for (double temp; cin >> temp; ) // read into temp
    		temps.push_back(temp); // put temp into vector
    							   // compute mean temperature:
    	double sum = 0;
    	for (int x : temps) sum += x;
    	cout << "Average temperature: " << sum / temps.size() << '\n';
    	// compute median temperature:
    	sort(temps); // sort temperatures
    	cout << "Median temperature: " << temps[temps.size() / 2] << '\n';
    
    }
    

    funktioniert genau so wie es im Buch steht. Das erste Problem war die #include "std_lib_facilities.h", welche fehlerhaft war. Das zweite Problem bestand darin, dass das Fenster sich geschlossen hat. Welches nun auch so funktioniert wie es soll.



  • wie alles ausprobieren? funktionen sind grundlegende sprachelemente, die man gleich nach ein- und ausgabe lernt.

    ist jetzt nur ein gut gemeinter ratschlag, aber wie wäre es mit einem vernünftigen lehrbuch?



  • HansKlaus schrieb:

    wie alles ausprobieren? funktionen sind grundlegende sprachelemente, die man gleich nach ein- und ausgabe lernt.

    ist jetzt nur ein gut gemeinter ratschlag, aber wie wäre es mit einem vernünftigen lehrbuch?

    Habe das und nutze es
    Programming: Principles and Practice Using C++ (2nd Edition) finde das ok



  • evev schrieb:

    vector<double> temps; // temperatures
    (...)
    	double sum = 0;
    	for (int x : temps) sum += x;
    	cout << "Average temperature: " << sum / temps.size() << '\n';
    

    funktioniert genau so wie es im Buch steht.

    So steht das im Buch?
    Was ist denn der mittlere Temperatur, wenn man nur eine Temperatur eingibt, zum Beispiel 4.2 Grad? Richtig, in deinem Programm ist der Mittelwert aus 4.2 nicht 4.2, sondern 4. Und das, obwohl sowohl sum als auch temps doch double-Werte speichert! Aber schau dir mal die for-Schleife an: du addierst immer nur ints! Also nimm "auto". Oder schau dir mal std::accumulate an.



  • Danke für deinen Beitrag.
    Du hast vollkommen recht, das er nur die 4 ausgibt, bei der Eingabe von 4.2.
    Habe es nun mit deinem auto Wert probiert und genauso mit double anstatt int. Funktioniert beides. Danke

    ich verlinke dir mal die Seite da steht es exakt so drinn.
    https://i.imgur.com/Hqs0huA.png



  • evev schrieb:

    Habe es nun mit deinem auto Wert probiert und genauso mit double anstatt int.

    Was meinst du, ist besser?

    evev schrieb:

    ich verlinke dir mal die Seite da steht es exakt so drinn.

    Was sagt das über die Qualität der Seite aus?
    Oder wird das später noch erläutert?



  • [quote="DirkB"]

    evev schrieb:

    Habe es nun mit deinem auto Wert probiert und genauso mit double anstatt int.

    Was meinst du, ist besser?

    Ich denke, dass auto die bessere Wahl wäre, da er automatisch einen Datentyp festlegt. Sollte es falsch sein was ich gelesen habe, bitte korrigieren.

    evev schrieb:

    ich verlinke dir mal die Seite da steht es exakt so drinn.

    Was sagt das über die Qualität der Seite aus?
    Oder wird das später noch erläutert?

    Über die Qualität kann ich nichts sagen, da ich Anfänger bin und mir daher das Urteil nicht erlauben "kann". Der Link zeigt das die Codezeile im Text so steht und kein Fehler bei der Übernahme entstanden ist.

    evev



  • viele nützliche Informationen zu finden, ich freue mich, Ihrer Gemeinschaft beitreten!


Anmelden zum Antworten