Embarcadero i unordered_map

0

Cześć, chcę się nauczyć wreszcie C++. Do tej pory siedziałem głównie w Delphi, więc wybór padł na Embarcadero (swoją drogą nowe Visual Studio utrudnia tworzenie aplikacji okienkowych w C++ i z tego, co czytałem, to MS w przyszłości w ogóle tego zabroni na rzecz C#).

Chcę się posłużyć unordered_map, ale nie będzie mi to chyba dane. Mam prosty kawałek kodu i błąd: E2303 Type name expected

Oto mój kod:

#include <System.hpp>
#include <unordered_map>
//---------------------------------------------------------------------------
using namespace std;

enum ElemFieldType
{
    expenditure,
    limit
};

class CBudget
{
    private:
        unordered_map<UnicodeString, int> m_items; //<-- błąd jest w tej linii

    public:
        CBudget();
        ~CBudget();

        double GetSum(ElemFieldType fType);
};

O co mu chodzi?

1

Mieszanie typów z std:: i VCL nie jest proste, lepiej tego nie rób przynajmniej dopóki się uczysz.

1

unordered_map i unordered_set wymagają funkcji hashującej (domyślnie std::hash, który nie ma specjalizacji dla UnicodeString). Albo napisz taką sam (np. używając fnv1a - to prosty w implementacji algorytm o rozsądnym rozrzucie), albo użyj std::map, albo używaj tylko narzędzi z jednego z std/VCL, tak jak @_13th_Dragon Ci radzi.

0

Hmmm, to w jaki sposób proponujecie uczyć się C++? Bo wyszedłem z założenia, że jeśli napiszę kilka programów, to już coś tam mi zaświeci. Ale widzę, że tworzenie aplikacji okienkowych w C++ to może nie jest najszczęśliwszy sposób nauki. Więc co. Na początek tylko konsola albo jakieś biblioteki?

0

OK, robię sobie w konsoli, ale z tym unordered_map jest to samo :|

Oto cały mój kod:

#pragma hdrstop
#pragma argsused

#include <tchar.h>
#include <stdio.h>
#include <unordered_map>

int _tmain(int argc, _TCHAR* argv[])
{
    std::unordered_map<int, int> test;
    return 0;
}

Dostaję błąd:'unordered_map' is not a member of 'std'

Jak usuwam std to mam, że: Undefined symbol 'unordered_map'

O co mu chodzi? Include'a się nie czepia. Nawet wchodzi do tamtego pliku.

0

Która to wersja buildera?
Może zbyt stara aby wiedzieć cokolwiek o C++11 ?

0

(swoją drogą nowe Visual Studio utrudnia tworzenie aplikacji okienkowych w C++

Jaka wersja to jest „nowe”? Żadna wersja nie utrudnia. Nie ułatwia najwyżej.

i z tego, co czytałem, to MS w przyszłości w ogóle tego zabroni na rzecz C#).
Bzdura.

Prawdopodobnie mylisz C++ z C++/CLI ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1