2016-04-10 7 views
2

Ich schreibe eine Klasse mit einer Struktur und mit einigen Methoden, die mit multimap arbeiten wird. Die addItemToList-Methode wird eine Struktur in multimap hinzufügen und saveListData-Methode speichert sie auf einer Binärdatei:C++: Wie bekomme ich Zugriff auf Daten in der statischen Multi-Map-Variable gespeichert

class listData 
{ 
public: 
    struct ItemStruct 
    { 
     long int item_id; 
     int ess_id; 
     char item_type; 
     char list_type; 
     time_t add_date; 
    }; 
    int addItemToList(long int item_id, char list_type, char item_type = '\0', int ess_id = 0) 
    {   
     ItemStruct *pAddingItem = new ItemStruct; 
     pAddingItem->item_id = item_id; 
     pAddingItem->list_type = list_type; 
     pAddingItem->item_type = item_type; 
     pAddingItem->ess_id = ess_id; 
     pAddingItem->add_date = std::time(nullptr); 
     typedef std::multimap<char, struct ItemStruct> ListDataMap; 
     static ListDataMap container; 
     container.insert(std::pair<char, struct ItemStruct>(list_type, *pAddingItem)); 
    return 0; 
    } 

    int saveListData() 
    { 
     // how can I access to data stored in the container static variable? 
    return 0; 
    }   
}; 

und dem nächsten Code für die Klasse:

#include <ctime> 
#include <iostream> 
#include <map> 
#include "lists.cpp" 
using namespace std; 

int main(int argc, char** argv) 
{ 
    listData test; 
    test.addItemToList(10, 's', 'm', 1555); 
    test.addItemToList(10, 'c', 'm', 1558); 

    test.saveListData(); 
} 

Wie kann ich den Zugriff auf Daten in der Container statischen Variable gespeichert?

Antwort

0

In Ihrem Code haben Sie Ihre Multimap im lokalen Bereich der Methode addItemToList deklariert, nicht im Klassenumfang. Wenn Sie auf verschiedene Methoden Ihrer Klasse zugreifen möchten, müssen Sie diese im Klassenbereich deklarieren und definieren.

Zusätzlich habe ich den Inhalt Ihrer addItemToList Implementierung angepasst, um ein Speicherleck zu vermeiden.

Zur Vereinfachung Ich habe alles in einer einzigen Datei:

#include <ctime> 
#include <iostream> 
#include <map> 
using namespace std; 

class listData 
{ 
    private: 
     struct ItemStruct 
     { 
      long int item_id; 
      int ess_id; 
      char item_type; 
      char list_type; 
      time_t add_date; 
     }; 

     typedef std::multimap<char, struct ItemStruct> ListDataMap; 
     static ListDataMap container; // multimap declaration 

    public: 
     int addItemToList(long int item_id, char list_type, char item_type = '\0', int ess_id = 0) 
     {   
      ItemStruct pAddingItem; 
      pAddingItem.item_id = item_id; 
      pAddingItem.list_type = list_type; 
      pAddingItem.item_type = item_type; 
      pAddingItem.ess_id = ess_id; 
      pAddingItem.add_date = std::time(nullptr); 
      container.insert(std::pair<char, struct ItemStruct>(list_type, pAddingItem)); 
      return 0; 
     } 

     int saveListData() 
     { 
      // use container here 
      // container.<whatever-method> 
      return 0; 
     }   
}; 

listData::ListDataMap listData::container; // multimap definition 

int main(int argc, char** argv) 
{ 
    listData test; 
    test.addItemToList(10, 's', 'm', 1555); 
    test.addItemToList(10, 'c', 'm', 1558); 

    test.saveListData(); 
}