Lopez
4/11/2007 8:05:00 PM
Adam Klobukowski napisa3(a):
> Witam
>
> Dopad3a mnie konieczno?a napisania pewnych spraw przy uzycia STL, co
> jest dla mnie o tyle bolesne ze zawsze mia3em problemy z templejtami
> (g3ównie chodzi o sk3adnie, po prostu nieprzyzwyczajony do nich jestem),
> a teraz mam pilna rzecz do zrobienia, dlatego prosz? o pomoc.
>
> Potrzebuje zadeklarowaa hash_map gdzie klucz jest typu string, a
> warto?ci? wska?nik do mojej klasy. Wczyta3em sie w krotki opis i
> wygenerowa3em mniej wiecej to:
>
> struct eqstr
>
> {
>
> bool operator()(const char* s1, const char* s2) const
>
> {
>
> return strcmp(s1, s2) == 0;
>
> }
>
> };
>
> hash_map<const char*, User*, hash<const char*>, eqstr> usersNames;
>
> string name;
>
> /* poberamy name */
>
> User u (name);
>
> usersNames.insert (pair <char*, User>(name, &u));
>
>
> I mam nastepujace bledy kompilacji:
>
> UserManager.cc:43: error: no matching function for call to
> 'std::pair<char*, User>::pair(std::string&, User*)'
> /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h:84:
> note: candidates are: std::pair<_T1, _T2>::pair(const _T1&, const _T2&)
> [with _T1 = char*, _T2 = User]
> /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h:80:
> note: std::pair<_T1, _T2>::pair() [with _T1 = char*, _T2
> = User]
> /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h:69:
> note: std::pair<char*, User>::pair(const
> std::pair<char*, User>&)
>
> Co jest nie tak? Jak to powinno bya poprawnie?
>
> Btw. jak daje #include <hash_map> to mam b3?d ze nie znaleziono includa,
> a jak daje #include <hash_map.h> to znajduje tyle ze mam oczywi?cie
> warning o deprecated. Dlaczego pierwszy przypadek nie dzia3a (pliki s?,
> sprawdzi3em)?
>
#include <ext/hash_map>
#include <string>
#include <cstring>
using namespace std;
using namespace __gnu_cxx;
struct User {
User(const string& name):name(name) {}
string name;
};
struct eqstr {
bool operator()(const char* s1, const char* s2) const {
return strcmp(s1, s2) == 0;
}
};
int main()
{
hash_map<const char*, User*, hash<const char*>, eqstr> usersNames;
const char* name = "terefere";
User u(name);
usersNames.insert (pair <const char*, User*>(name, &u));
return 0;
}
--
Pozdrawiam
Lopez