Hashtable

fant_lampe

Grünschnabel
Hashtable - Anfänger braucht Hilfe

Hallo! Ich versuche mir gerade eine kleine Hashtabelle zu erstellen, nutzlos, aber ich will ja lernen.
Sie funktioniert nicht. Weiß jemand woran das liegt? Vielen Dank!

hash.h:

Code:
#include<cstdlib>
#include <iostream>
#include <string>

using namespace std;

#ifndef Hash_H
#define HASH_H

class hash{


public:

	int Hash (string key); // grober Index für Array


};

#endif

hash.cpp:

Code:
#include<cstdlib>
#include <iostream>
#include <string>
#include "hash.h"

using namespace std;

int hash::Hash (string key) // Laut Compiler fehlt hier der Funktionsheader
{
	int hash = 0;
	int index;

	index = key.length();

	cout<< "key[0] = "<<key[0] <<endl;
	cout<< "key[1] = "<<key[1] <<endl;
	cout<< "key[2] = "<<key[2] <<endl;
	cout<< "key[3] = "<<key[3] <<endl;
	cout<< "key[4] = "<<key[4] <<endl;

	return index;

}

main.cpp:

Code:
#include<cstdlib>
#include <iostream>
#include <string>
#include "hash.h"

using namespace std;

int main (int argc, char**argv)
{

	int index;
	hash hashObj; //laut Fehlermeldung ist "hash" mehrdeutig, aber warum?

	index = hashObj.Hash("Steff");
	cout<< "index = " <<index<<endl;

	getchar();
	getchar();

return 0;
}
 
Zuletzt bearbeitet:
Also abgesehen davon, dass Kon- und Destruktor fehlen:
Die Präprozessordirektiven sind case-sensitive. Dein ifndef sollte somit HASH_H sein.
Was ist denn die genaue Fehlermeldung?

Gruss
cwriter
 
ifndef ist schon geändert und ist ärgerlicherweise ein Schusselfehler, danke schonmal dafür :)

Die genaue Aussage in der Fehlerliste: error C2872:´hash´:Mehrdeutiges Symbol
Das steht einmal in der hash.cpp und einmal in der main.cpp.

Aller Anfang ist schwer -.-

Was meinst du mit den Kon- und Destruktoren? Baut man die schon bei solchen simplen Progrämmchen ein?
 
Ich danke dir sehr^^
Ich möchte ja noch ein wenig mehr damit anstellen, deshalb schonmal die Klassen, das sollte ersteinmal ein Test sein, um zu schauen, ob das überhaupt läuft, was ich da gebaut habe. Und es hat sich für mich schon gelohnt, denn dank dir läuft es ^^
 
Hallo,

wird nicht explizit ein Konstruktor/Destruktor angegeben wird ein automatisch generierter Standardkonstruktor/-Destruktor verwendet. Es ist also bei einfachen Klassen kein Problem und auch nicht falsch, diese Elemente wegzulassen.

Gruß
MCoder
 
Hallo

Zudem: using namespace std; ist in jedem Falle eine Sünde, es in einem Header zu verwenden sogar eine Todsünde. Gewöhn dir früh an alle std-Element immer bei vollem Namen zu verwenden, einzige Ausnahme, die man geben kann: std::cout und std::cin sowie std::endl, und zwar folgendermassen:
C++:
int main() {
   using std::cout;
   using std::cin;
   using std::endl;

   cout << "Test" << endl;
   char c;
   cin >> c;
}

Wobei ich auch da immer std verwende, das ist kein merkbarer Mehraufwand, aber einfach sauberer.

Grüsse
Cromon
 
Danke euch, für die Hinweise, sowas muss man wirklich erstmal wissen.

Dieses using namespace std; - warum gibt es das dann wenn es nicht "sauber" ist?
In der main eingearbeitet in die Funktion ist es doch nun wie eine Art Deklaration oder?

Aber danke, ist notiert und findet sofort Anwendung^^

Grüße!!
 
Zuletzt bearbeitet:
...puh, daran muss ich mich wirklich gewöhnen, Gott sei dank gibt es Copy/Paste^^

Jetzt muss ich also auch using std::string schreiben, sonst meckert der Compiler. Kann ich mir damit nun #include <string> sparen? (Auch auf die Gefahr hin, dass diese Frage dumm klingt - aber ich bin Anfänger und muss Fragen stellen^^)

Und: nutze ich das nur in der Headerdatei oder auch in den Quelldateien?
 
Zurück