Datei einlesen und Daten in Unordered Map speichern



  • Hast du da ebenfalls die includes drin?

    Jede Übersetzungseinheit braucht alle Definitionen von neuem.



  • Also ich hab den Code in eine cpp Datei und eine Header Datei getrennt.
    Im Header stehen folgende includes:

    #include <unordered_map>
    #include <fstream>
    #include <iostream>
    

    Und die in der cpp:

    #include "kartenfabrik.hpp"
    using namespace std;
    

    Wobei halt der Header "kartenfabrik.hpp" heißt.

    Grüße,
    Neras



  • Probiers mal noch mit dem:

    #include <istream>
    


  • Fuktioniert leider nicht mit dem neuen Include. Ich poste mal meinen Quellcode, hilft vll. weiter 😉

    Header:

    #include "karte.hpp"
    #include <unordered_map>
    #include <fstream>
    #include <iostream>
    #include <istream>
    
    class Kartenfabrik
    {
    		//Attribute
    
    		//Methodendefinition
    	public:
    		Kartenfabrik();
    
    		void karteErstellen();
    		void stapelErstellen();
    
    		std::istream& komma( std::istream& in );
    
    };
    

    CPP:

    #include "kartenfabrik.hpp"
    using namespace std;
    
    			/* Methodenimplementierung */
    Kartenfabrik::Kartenfabrik()
    {
    
    } 
    
    void Kartenfabrik::karteErstellen()
    {
    	ifstream kartenDaten ("Karten/Karten.csv");
    
    	typedef tr1::unordered_map< string, int > hashmap;
        hashmap faehigkeiten;
    
    	if (kartenDaten.is_open())
    	{
    		int f;
            for( int y = 1; kartenDaten >> f >> komma; ++y )
            {
                switch(y)
                {
                case 1: faehigkeiten["karteZiehen"] = f;
    					break;
                case 2: faehigkeiten["aktionenPlus"] = f;
    					break;
    			case 3: faehigkeiten["kaufenPlus"] = f;
    					break;
    			case 4: faehigkeiten["goldPlus"] = f;
    					break;
    			case 5: faehigkeiten["gegnerKartenAblegen"] = f;
    					break;
    			}
            }
    		kartenDaten.close();
    	}else
    	{
    		cout << "Datei kann nicht gefunden werden!" << endl;
    
    	}
    
    	cout << faehigkeiten["karteZiehen"] << endl;
    	cout << faehigkeiten["aktionenPlus"] << endl;
    }
    
    void Kartenfabrik::stapelErstellen()
    {
    
    }
    
    istream& Kartenfabrik::komma( istream& in )
    {
        char k;
        if( in >> k && k != ',' )
            in.setstate( ios_base::failbit );
        return in;
    }
    

    Grüße,
    Neras



  • class Kartenfabrik
    {
            //Attribute
    
            //Methodendefinition
        public:
            Kartenfabrik();
    
            void karteErstellen();
            void stapelErstellen();
    
    };
    
    std::istream& komma( std::istream& in );
    
    istream& komma( istream& in )
    {
        char k;
        if( in >> k && k != ',' )
            in.setstate( ios_base::failbit );
        return in;
    }
    


  • Das scheint fuktioniert zu haben. Danke für deine Hilfe 😃
    Kannst du mir bitte aber noch sagen, wieso ich diesen Teil des Codes außerhalb der Klasse lassen musste?

    Grüße,
    Neras



  • Neras schrieb:

    Das scheint fuktioniert zu haben. Danke für deine Hilfe 😃
    Kannst du mir bitte aber noch sagen, wieso ich diesen Teil des Codes außerhalb der Klasse lassen musste?

    Grüße,
    Neras

    Weil es sonst beim lookup nicht gefunden wird.



  • Sorry, wenn ich das jetzt frage, aber was ist ein "lookup"? Ich hab gegooglet (vielleicht nicht ausreichend, aber schon eine Weile) aber nichts aussagekräftiges gefunden. ^^°

    Grüße,
    Neras



  • Neras schrieb:

    Sorry, wenn ich das jetzt frage, aber was ist ein "lookup"?

    Ich würde es mit "Nachschlagen" übersetzen.



  • Neras schrieb:

    Sorry, wenn ich das jetzt frage, aber was ist ein "lookup"? Ich hab gegooglet (vielleicht nicht ausreichend, aber schon eine Weile) aber nichts aussagekräftiges gefunden. ^^°

    Grüße,
    Neras

    Der Compiler sucht da eine Funktion, die implizit ein std::istream erwartet, du hast da allerdings eine Funktion, die implizit einen Zeiger auf ein Objekt (hier Kartenfabrik) und dann erst einen std::istream erwartet. Wenn du da Membervariablen hast, die du ausgeben möchtest, dann kannst du die Funktion auch friend machen. Dann klappt das auch.

    Und der lookup ist genau das suchen nach passenden Funktionen.


Anmelden zum Antworten