[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Template, STL

Adam Klobukowski

4/11/2007 6:19:00 PM

Witam

DopadÅ?a mnie koniecznoÅ?Ä? napisania pewnych spraw przy uzycia STL, co
jest dla mnie o tyle bolesne ze zawsze miaÅ?em problemy z templejtami
(gÅ?ównie chodzi o skÅ?adnie, po prostu nieprzyzwyczajony do nich jestem),
a teraz mam pilna rzecz do zrobienia, dlatego prosz¶ o pomoc.

Potrzebuje zadeklarowaÄ? hash_map gdzie klucz jest typu string, a
wartoÅ?ciÄ? wskaźnik do mojej klasy. WczytaÅ?em sie w krotki opis i
wygenerowaÅ?em mniej wiÄ?cej 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 byÄ? poprawnie?

Btw. jak daje #include <hash_map> to mam bÅ?Ä?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 dziaÅ?a (pliki sÄ?,
sprawdziÅ?em)?

--
Semper Fidelis

Adam Klobukowski
adamklobukowski@gmail.com
3 Answers

Lopez

4/11/2007 8:05:00 PM

0

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

Marcin 'Qrczak' Kowalczyk

4/11/2007 10:23:00 PM

0

Dnia 11-04-2007, sro o godzinie 20:19 +0200, Adam Klobukowski
napisal(a):

> Potrzebuje zadeklarowac hash_map gdzie klucz jest typu string, a
> wartoscia wskaznik do mojej klasy.

Skoro string, to lepiej std::string niz const char *.

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

Adam Klobukowski

4/12/2007 5:11:00 AM

0

Lopez napisa3(a):
> Adam Klobukowski napisa3(a):
>> Witam
>>

<ciach>

Dzieki wielkie :D

--
Semper Fidelis

Adam Klobukowski
adamklobukowski@gmail.com