Dobra, próbuję zrobić szybką małą klasę do pracy jako rodzaj tablicy hash. Jeśli uda mi się go uruchomić, powinienem być w stanie to zrobić:operator [] = przeciążenie?
StringHash* hash = new StringHash;
hash["test"] = "This is a test";
printf(hash["test"]);
I powinien wydrukować "To jest test".
Wygląda na to, że mam 2 problemy w tym momencie. Po pierwsze ja to zrobił:
const char* operator[](const char* key) {
for(int i = 0; i < hashSize; ++i) {
if(strcmp(hkeys[i], key) == 0) {return values[i];}
}
return NULL;
}
Ale gdy próbuję patrzeć wartość kompilator narzeka, że
Błąd: nieprawidłowy rodzaje `StringHash * [const char [5]]” do tablicy indeksu
Po drugie operator [] = nie wydaje się być poprawną składnią tutaj. Jedyną rzeczą, którą mogłem znaleźć był operator [], ale myślę, że to nie zadziała, skoro muszę zakodować procedurę wyszukiwania? (Czy ta składnia nie jest używana do zwracania odwołania do elementu tablicy?)
Czy to, co próbuję tutaj zrobić, jest możliwe? Każda rada doceniona. :)
Wydaje się być zamieszaniem w związku z tym, co próbuję zrobić. Będę pisać mój kod:
gotowego produktu po wszelką pomoc:
Hmm ... Chyba rozumiem, co mówisz. Chcesz, żebym napisał klasę z operatorem =(), a następnie mam ten uchwyt dodając wpis do tabeli, tak? Widzę, że działa. Rzecz, której się martwię, nie musiałbym przechowywać wewnętrznej tablicy, która utrzymywałaby instancję tej klasy dla każdego ... Ach, nie czekaj. Mogłem po prostu użyć tych obiektów jako wartości wewnętrznych zamiast const char *, a następnie zwrócić je podczas wyszukiwania. Rozumiem. :) – Khat
Strzelaj. Nie pozwolę mi tego zrobić w ten sposób. Ciągle próbuje zwrócić magiczny przedmiot zamiast cortingu. – Khat
Możesz zdefiniować niejawną konwersję między typem "magicznym" i "const char *". Używanie 'std :: string' jest jednak bardziej niezawodnym rozwiązaniem. –