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 functionint 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 invaliddann 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 functionint 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 ?