enum fehlermeldungen (dev d++)



  • Hi ihr,

    ich hab ein problem aus dem ich einfach nicht schlau werde.
    ich benutze dev c++ und sollte einfach eine vector liste erstellen mit tierarten. jedes tier hate verschiedene eigenschaften und eins war ein enum.

    hier die lösung der aufgabe (läuft auf visual studio 2010):

    #include <iostream>
    #include <string>               // String-Typ
    #include <vector>               // Vektor-Typ
    
    using namespace std;
    
    int main() {
    
    	enum kategorie {Wale, Insektenfresser, Primaten, Raubtiere, andere};
    	struct Saeugetiere {
    		string name;
    		kategorie art;
    		float gewicht;
    		float groesse;
    	} buffer;
    
    	vector<Saeugetiere> tiere;
    
    	bool ende=false;
    	int eingabe;
    
    	do {
    		cout << "Geben Sie einen Namen ein: ";
    		cin >> buffer.name;
    		do{
    			cout << "Welcher Art ist das Tier?" 
    				<< endl << "1. wale"
    				<< endl << "2. insektenfresser" 
    				<< endl << "3. primaten" 
    				<< endl << "4. raubtiere" 
    				<< endl << "5. andere" << endl;
    			cin >> eingabe;
    		}while(eingabe < 1 || eingabe > 5); 
    
    		switch (eingabe){
    			case 1: buffer.art = wale;
    				break;
    			case 2: buffer.art = insektenfresser;
    				break;
    			case 3: buffer.art = primaten;
    				break;
    			case 4: buffer.art = raubtiere;
    				break;
    			case 5: buffer.art = andere;
    				break;
    		}
    
    		cout << "Gewicht des Tieres: ";
    		cin >> buffer.gewicht;
    		cout << "Groesse des Tieres: ";
    		cin >> buffer.groesse;
    
    		tiere.push_back(buffer);
    
    		cout << "BEENDEN? ja=1 / nein=0" << endl;
    		cin >> ende;
    	}while(!ende);
    
    	cout << "\tNAME\t|\tART\t|\tGEWICHT\t|\tGROESSE\t" << endl;
    	cout << "------------------------------------------------------------------------" << endl;
    	for(int i = 0; i<tiere.end()-tiere.begin(); i++){
    		cout << "\t" << tiere.at(i).name << "\t|\t" << tiere.at(i).art+1 << "\t|\t" << tiere.at(i).gewicht << "\t|\t" << tiere.at(i).groesse << endl;
    	}
    
    	//ENDE
    	system("PAUSE");
    	return 1;
    }
    

    und die Fehlermeldung:
    In function int main()': 23: error: \main()::Saeugetiere' uses local type `main()::Saeugetiere'
    23: error: trying to instantiate `template<class _Alloc> class std::allocator'
    23: error: template argument 2 is invalid

    dann habe ich ne einfache datei gemacht um zu schaun ob er allgemein ein problem mit enum hat und siehe da es geht nicht.

    also einfaches programm:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        enum bla {ameise, luft, blau} peng;
        peng = 1;
        cout << peng;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    mit einer fehlermeldung die mir zwar sagt was ich falsch mache aber auch ein durchforsten des internets hat mir da nicht geholfen.

    Fehlermeldung:
    In function int main(int, char**)': 9: error: invalid conversion from \int' to `main(int, char**)::bla'

    Wäre echt schön wenn ihr mir da helfen könntet 🙂



  • vergesst das mini bspl am ende habe meinen fehler grade gemerkt. das passiert wenn man mal wieder viel zu kompliziert denkt.

    mein problem mit dem vector besteht allerdings weiterhin.



  • Die erste Zeile der Fehlermeldung sagt dir doch schon genau, wo das Problem ist: Die Typen "enum kategorie" und "struct Saeugetiere" sind lokal in der main()-Funktion definiert, das heißt sie sind außerhalb nicht bekannt (und damit für einige Anwendungen auch nicht nutzbar. Korrekt müsste es so aussehen:

    enum kategorie {Wale, Insektenfresser, Primaten, Raubtiere, andere};
    struct Saeugetiere {
        string name;
        kategorie art;
        float gewicht;
        float groesse;
    };
    
    int main() {
       Saeugetiere buffer;
       ...
    

    PS: Diese Art, die Größe eines vector<>s zu ermitteln, sieht man auch nicht oft 🤡 Was hast du gegen tiere.size() ?



  • CStoll schrieb:

    PS: Diese Art, die Größe eines vector<>s zu ermitteln, sieht man auch nicht oft 🤡 Was hast du gegen tiere.size() ?

    äähm nüx ^^ naja das hab nicht ich geschrieben also die ausgabe schleife ^^
    und ja ich hätte size genommen 🙂

    ok ich merke mir einfach das ich manchmal sehr hohl bin^^

    mal sehen ob mir in der klausur der selbe fehler unterläuft 😞



  • Dev-C++ ist veraltet (seit 2005 nicht mehr weiterentwickelt) ich empfehle Microsoft Visual C++ 2010 Express.



  • sukeyas schrieb:

    CStoll schrieb:

    PS: Diese Art, die Größe eines vector<>s zu ermitteln, sieht man auch nicht oft 🤡 Was hast du gegen tiere.size() ?

    äähm nüx ^^ naja das hab nicht ich geschrieben also die ausgabe schleife ^^
    und ja ich hätte size genommen 🙂

    ok ich merke mir einfach das ich manchmal sehr hohl bin^^

    mal sehen ob mir in der klausur der selbe fehler unterläuft 😞

    naja, dass du per iterator die größe berechnest ist kein fehler in dem sinne. es ist nur etwas mehr schreibarbeit und aufwand - vielleicht etwas langsamer als size(), je nach optimierungen - aber auch richtig.

    andererseits hättest du dann direkt iteratoren nehmen können...



  • Skym0sh0 schrieb:

    naja, dass du per iterator die größe berechnest ist kein fehler in dem sinne. es ist nur etwas mehr schreibarbeit und aufwand - vielleicht etwas langsamer als size(), je nach optimierungen - aber auch richtig.

    Ich hab' nicht gesagt, daß die Methode falsch ist - sie ist nur etwas *hmm* ungewöhnlich. Entweder ich arbeite mit Indizes und size() oder ich verwende direkt die Iteratoren:

    for(vector<Saeugetiere>::iterator pos=tiere.begin();pos!=tiere.end();++pos)
      cout<<pos->name<<...;
    


  • Oberon_0 schrieb:

    Dev-C++ ist veraltet (seit 2005 nicht mehr weiterentwickelt) ich empfehle Microsoft Visual C++ 2010 Express.

    4 mal versucht auf meinem laptop zu instalieren und 4mal hinter her neu aufgesetzt weil er nicht mehr ging .... somit nein danke^^

    auserdem kann ich das ganze ja in der uni benutzen^^ blos zuhause möchte ich den kram nicht haben^^



  • sukeyas schrieb:

    Oberon_0 schrieb:

    Dev-C++ ist veraltet (seit 2005 nicht mehr weiterentwickelt) ich empfehle Microsoft Visual C++ 2010 Express.

    4 mal versucht auf meinem laptop zu instalieren und 4mal hinter her neu aufgesetzt weil er nicht mehr ging .... somit nein danke^^

    auserdem kann ich das ganze ja in der uni benutzen^^ blos zuhause möchte ich den kram nicht haben^^

    lol, da hast du was falsch gemacht. Visual Studio ist mit das eifnachste was man installieren kann...
    dauert nur was und man braucht vllt ein paar windows updates



  • da kannst du gerne recht haben ^^ aber ich glaub ich bleibe einfach bei dev c++ ^^ es geht ja wenn man die einzelnen fehler weis 🙂

    muss nun nur noch schaun was ich im nächsten semester mache mit c# ... habe einfach kein bock mich an die lahmen rechner der uni zu setzten 😉



  • Dann kannst du die Features aus dem neuen Standard aber voll vergessen, schade eig.

    Schonmal Code::Blocks probiert ?


Anmelden zum Antworten