Probleme beim map definieren



  • Wenn du den std namespace nicht angibst, dann schreib std::map



  • the_alien schrieb:

    Wenn du den std namespace nicht angibst, dann schreib std::map

    ich schreib doch:
    using namespace std;
    aber habs natuerlich probiert, auch std::map <int, int, less<int>> m1; bringt nichts.



  • krid schrieb:

    the_alien schrieb:

    Wenn du den std namespace nicht angibst, dann schreib std::map

    ich schreib doch:
    using namespace std;
    aber habs natuerlich probiert, auch std::map <int, int, less<int>> m1; bringt nichts.

    Warum brauchst du denn den Sortierdinger? map<int, int> sortiert doch eh aufsteigend nach dem ersten int? oder was willst du mit dem less<int> erreichen?



  • krid schrieb:

    the_alien schrieb:

    Wenn du den std namespace nicht angibst, dann schreib std::map

    ich schreib doch:
    using namespace std;
    aber habs natuerlich probiert, auch std::map <int, int, less<int>> m1; bringt nichts.

    abc.cpp(31): error C2371: 'gGlobals::m1' : redefinition; different basic types 
    abc.cpp(31): error C2501: 'm1' : missing storage-class or type specifiers
    

    Naja, allerdings kennt der Compiler std::map nicht wie es scheint...



  • So, hab das Problem (auch wenn ich immer noch nicht weiss woran es lag) geloesst, dadurch dass ich den code in ein anderes Modul verschoben habe.

    Jetzt musste ich aber feststellen, dass das was ich vorhatte, damit gar nicht zu gehen scheint:

    // definition von zwei (oder mehr) 2-dimensionalen CString Arrays
      CString hole[30][3]={
        {"STANDARD","",""},
        {"MEASUREMENT","",""},
        {"MODEL_SCALE","",""},
      };
    
      CString text[30][3]={
        {"SYMBOL_PROPERTIES_DIMENSION_STYLE","",""},
        {"SYMBOL_PROPERTIES_TEXT_HEIGHT","",""},
        {"SYMBOL_PROPERTIES_TEXT_STYLE","",""},
        {"SYMBOL_PROPERTIES_TEXT_COLOR","",""},
        {"SYMBOL_PROPERTIES_ARROW_SIZE","",""},
      };
    
      // Erstellung einer map, die diese Arrays beinhalten soll
      using namespace std;
      map<CString,CString[30][3]> opPages;
      typedef map<CString,CString[30][3]>::value_type valType;
    
      // Einfuegen der CString Arrays
      opPages.insert(gGlobals::valType(CString("HOLE"),hole));
      opPages.insert(gGlobals::valType(CString("TEXT"),text));
    

    Das Problem scheint daran zu liegen, dass die map keine Arrays enthalten kann.
    Fehlermeldung:
    C:\Program Files\Microsoft Visual Studio .NET\Vc7\include\utility(34): error C2536: 'std::pair<_Ty1,_Ty2>::std::pair<_Ty1,_Ty2>::second' : cannot specify explicit initializer for arrays
    with
    [
    _Ty1=const CString,
    _Ty2=ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char>>> [30][3]
    ]
    and
    [
    _Ty1=const CString,
    _Ty2=ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char>>> [30][3]
    ]

    Wie kann ich diese Daten denn sonst am besten speichern?
    Ich bauche die CString Arrays von oben (bis zu 20 Stueck) sowie einen "Name" (hier 'HOLE') in einer "Variable, so dass ich auf alle Elemente anhand des Namens und des ersten Werts in den CString Arrays (z.B. "STANDARD") einzelend zugreifen kann?

    Nach der hier verwendeten Methode muesste es aber doch gehen, wenn ich Pointer auf die CString Arrays in die map speicher, oder?



  • Jap, sollte gehen.



  • Gibt es noch eine bessere (mehr C++ typische) Möglichkeit?



  • Was ist denn c++ typisch?



  • the_alien schrieb:

    Was ist denn c++ typisch?

    Ich meinte damit eine Methode ohne Arrays sondern irgendwie mit C++ Objekten wie Listen oder multimap. Habe damit aber bisher noch wenig Erfahrung.



  • boost::array ist ne gute möglichkeit 🙂

    fühlt sich wie ein vector an, ist aber ein statisches array 🙂


Anmelden zum Antworten