Hilfe bei Header Implementierungen.
-
Hallo liebes Forum,
ich habe hier ein Programm bei dem ich nicht weiß was ich
in die einzelnen Header Dateien codieren soll, damit das Programm
Fehlerfrei läuft. String.h, map.h und vector.h sind die einzelnen Dateien.Programm:
#include <iostream> #include <assert.h> #include "string.h" #include "map.h" #include "vector.h" typedef map<vector<unsigned>,string> ForwardMap; typedef map<string,vector<vector<unsigned>>> BackwardMap; void readKey(vector<unsigned>& rRes) { while (true) { int i; std::cin >> i; if (i < 0) return; else rRes.push_back(i); } } void insert(ForwardMap& rF,BackwardMap& rB) { vector<unsigned> key; readKey(key); string s; std::cin >> s; rF.insert(key,s); vector<vector<unsigned>>* res = rB.find(s); if (res == nullptr) rB.insert(s,{key}); else res->push_back(key); } void search(const ForwardMap& crF,const BackwardMap& crB) { vector<unsigned> key; readKey(key); string* res = crF.find(key); if (res != nullptr) { vector<vector<unsigned>>* res2 = crB.find(*res); std::cout << *res << " " << res2->size() << std::endl; for(unsigned ui1 = 0;ui1 < res2->size();++ui1) { for(unsigned ui2 = 0;ui2 < (*res2)[ui1].size();++ui2) std::cout << (*res2)[ui1][ui2] << " "; std::cout << std::endl; } } } int main() { ForwardMap m1; BackwardMap m2; while(true) { unsigned cmd = 0; std::cin >> cmd; switch (cmd) { case 1: insert(m1,m2);break; case 2: search(m1,m2);break; default: return 0; } } return 0; }
-
Wir auch nicht.
Wir wissen noch nicht einmal, was das Programm machen soll.
Wir wissen auch nicht, welche Fehler auftreten.
-
string.h
,vector.h
undmap.h
sind schon mal merkwürdig. Normalerweise sind das Klassen der STL und liegen instring
,vector
undmap
, also ohne die Endung .h.
Falls du die Klassen der STL benutzt musst du den namespace den Typen explizit voranstellen, alsostd::string
stattstring
. Gleiches gilt fürmap
undvector
.
Ansonsten:
Das, was manni sagt.
-
Du möchtest wohl eher die Header der Standard-C++ Library einbinden:
#include <string> #include <map> #include <vector>
Da die enthaltenen Klassen dadrin alle im Namensbereich
std
liegen, mußt du eines der folgenden Dinge umsetzen:- explizit vor jede Klasse
std::
schreiben (so wie du es ja beistd::cin
undstd::cout
auch schon gemacht hast ;- ) using namespace std;
- explizit für jede einzelne zu benutzende Klasse
using ...
einmalig schreiben, z.B.using std::vector;
- explizit vor jede Klasse
-
@DocShoe sagte in Hilfe bei Header Implementierungen.:
string.h
,vector.h
undmap.h
sind schon mal merkwürdig. Normalerweise sind das Klassen der STL und liegen instring
,vector
undmap
, also ohne die Endung .h.Die andere Form des Includes und die Endung suggerieren aber, dass das möglicherweise eigene Header sind, und früher gab es auch mal beim Compiler string.h, vector.h … aber das ist alles STL lange vor dem ersten ISO C++ Release.
-
Ja, früher hieß Twix Raider. Der erste Standard ist von 1998, glaubst du OP benutzt einen Compiler, der so alt ist? Ja, vielleicht, oder vielleicht hat der TE auch zufällig Klassen programmiert, die sich in Bezug auf Namen und Syntax nicht von denen der STL unterscheiden. Welche der beiden Optionen ist wahrscheinlicher, die, die ich gerade genannt habe, oder die, dass die #include Namen falsch sind?
-
@DocShoe sagte in Hilfe bei Header Implementierungen.:
Ja, früher hieß Twix Raider. Der erste Standard ist von 1998, glaubst du OP benutzt einen Compiler, der so alt ist?
Mich würde es nicht wundern, wenn es mal wieder so eine uralt Übung wäre.
-
@john-0 sagte in Hilfe bei Header Implementierungen.:
Mich würde es nicht wundern, wenn es mal wieder so eine uralt Übung wäre.
This!
@Rudi231: ist das eine Übungsaufgabe von <ganz alt>?
Ich würde
typedef map<vector<unsigned>,string> ForwardMap;
so schreiben:
using ForwardMap = std::map<std::vector<unsigned>, std::string>;
Also mit
using
statttypedef
. Das geht wesentlich einfacher in meinen Kopf.Aber abgesehen von der Schreibweise: eine
map
mit einemvector<>
als Key? Gehen tut das, aber das erscheint mir doch hoch fragwürdig!