[gelöst] hash_map Deklaration



  • Hallo,

    Ich habe hier ein Problem beim erstellen einer Klasse, die eine hash_map benutzt.
    Ich erhalte ua die Fehlermeldung:

    Fehler: ISO-C++ verbietet Deklaration von »hash_map« ohne Typ Huffman2 Encoder.hpp line 24 1255776849564 585

    /* 
     * File:   Encoder.hpp
     * Author: anna
     *
     * Created on 11. Oktober 2009, 20:49
     */
    
    #include <map>
    #include <hash_map>
    #include <string>
    #include <fstream>
    #include <list>
    #include <string>
    
    #include "TreeNode.hpp"
    
    using namespace std;
    
    class Encoder {
    private:
        fstream file;
        hash_map<unsigned char, unsigned int> freq_map;
        list<TreeNode> NodeList;
    
    public:
    
        Encoder(fstream f) {
            file = f;
            createFrequencyMap();
        }
    
        Encoder(){
    
        }
    
    private:
    
        void createFrequencyMap() {
    
            // file.open( s.c_str(), fstream::in );
            char ctmp = file.get();
    
            while (ctmp != EOF) {
                cout << ctmp << "\n";
                freq_map[ctmp]++;
                // _totalCharCount++;
    
                ctmp = file.get();
    
            }
        }
    
        // Bitcode fehlt
        void createTree() {
            for (hash_map::iterator iter = freq_map.begin(); wfi != freq_map.end(); ++wfi) {
                TreeNode temp(freq_map->first, freq_map->second);
                NodeList.push_front(tempconst char *);
            }
            // Man darf gespannt sein
            while (NodeList.size() != 1) {
                NodeList.sort();
                TreeNode smallest = NodeList.pop_front();
                TreeNode ndsmallest = NodeList.pop_front();
                NodeList.push_front(TreeNode connection(smallest, ndsmallest, smallest.getFrequency() + 2ndsmallest.getFrequency()));
            }
        }
    
    }; /* _ENCODER_HPP */
    

    Ich nutze g++4.3.3

    Kann mir jemand erkären, was denn da noch rein muss?



  • Bist du sicher, daß der Fehler schon in Zeile 24 auftritt und nicht erst in Zeile 59? Da fehlen nämlich die Template-Parameter:

    hash_map<unsigned char, unsigned int>::iterator iter = ...
    

    Du kannst dir stattdessen auch ein typedef definieren:

    typedef hash_map<unsigned char, unsigned int> MyHashMap;
    
    MyHashMap::iterator iter = ...;
    

    P.S. "using namespace std;" in Header-Dateien ist böse!
    Und trenne besser Deklaration und Definition in .h und .cpp-Datei.



  • Ich bin einfach auf ein reines map umgestiegen, dann geht es.

    Ich hab übrigens noch ne .cpp Datei, das war nur die Klasse, um die es ging.

    Trotzdem danke für die Antwort!


Anmelden zum Antworten