nicht aufrufen Ich habe mehrere Threads hier gelesen und denke, ich habe dies entsprechend eingerichtet. Ich glaube, das Problem ist, dass ich ein * benutze und ich habe die überladene < < Einrichtung irgendwie nicht richtig, dh - die Parameterdefinition ist falsch. Das Problem ist, kompiliert und läuft erfolgreich, so habe ich keine Ahnung, wo ich den Fehler mache.Kann Überladung << Operator in C++
Es tut mir wirklich leid, wenn dies zuvor beantwortet wurde, aber ich kann es nicht finden.
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <list>
#include <exception>
using namespace std; //Allows us to not prepend std:: to many things.
template<class t>
class HashingTable
{
public:
HashingTable();
HashingTable(int size);
void insert(const char *x);
private:
int x = 0;
vector<list<const char *>> hashedLists;
int currentSize;
int hash(const char * key);
friend std::ostream& operator << (std::ostream & os, const HashingTable<t>);
};
template<class t> std::ostream& operator<< (ostream & os, const HashingTable<t> &ht)
{
const int listSize = ht.size();
for (unsigned int i = 0; i < listSize; i++)
{
list<const char *> searchList = ht[i];
for (std::list<const char *>::const_iterator si = std::next(searchList.begin(), listSizeLimit); si != searchList.end(); ++si) //for each value in hashed list.
cout << *si << " ";
}
return os;
};
template<class t>
int HashingTable<t>::hash(const char * key) {
return key[0] - 'A';
};
template<class t>
HashingTable<t>::HashingTable(int size)
{
hashedLists.resize(size);
};
template<class t>
HashingTable<t>::HashingTable()
{
hashedLists.resize(0);
};
template<class t>
void HashingTable<t>::insert(const char *x) {
//string tempStr(x);
unsigned int hashVal = hash(x);
if (hashedLists.size() < (hashVal + 1)) //if the number of lists in the current vector is less than the resize value then...
hashedLists.resize(hashVal + 1); //resize the hashedLists vector
list<const char *> iList = hashedLists[hashVal];
if (std::find(iList.begin(), iList.end(), x) == iList.end())
{
iList.push_back(x);
hashedLists[hashVal] = iList;
}
currentSize++;
};
int main() /* A sample main program */
{
HashingTable<char*>* mht;
char* Names[25] = { "AB", "AC", "AE", "AZ",
"BA","BM", "BJ", "BZ",
"CA", "CX", "CZ", "CZZ",
"EJ", "EP", "EF", "ES",
"QW", "QE", "QR", "QD",
"SA", "SD", "SF", "SS", "SJ" };
int i;
mht = new HashingTable<char*>(0);
for (i = 0; i < 25; i++)
(*mht).insert(Names[i]);
cout << "Printing the hash table after inserting...." << endl;
cout << *mht;
cout << endl;
return 0;
}
Vielen Dank für einen Einblick.
Keine "Schnipsel". Präsentiere deine [MCVE]. –
Die einzige andere Sache, die ich jetzt im Code mache, ist das Laden des Arrays. Ich habe es hinzugefügt. Vielen Dank. – thePetester
Dies ist kein vollständiger Code, bitte lesen Sie den Link im obigen Kommentar und beheben Sie ihn. Refactorieren Sie Ihren Code, um eine einzelne Datei zu erzeugen, die den gesamten Code enthält und alle Includes und Dinge wie 'using namespace std' zeigt, die Sie gerade nicht anzeigen. Wir sollten in der Lage sein, den angezeigten Code zu kopieren, ihn in einen Editor einzufügen und ihn zu kompilieren. Bis dahin ist es Zeitverschwendung, dies zu beantworten. –