Design Frage
-
Hallo, ich habe gerade mal ein paar Sachen zusammengeschrieben die ich geübt habe um die Sachen zu vertiefen.
Würdet ihr using namespace std; auch in die n.h mit aufnehmen oder lieber nicht ?
Denn wenn im Hauptprogramm kein using namespace std; verwendet wird dann funktioniert meine Klasse aus dem Namensraum data ja nicht.
main.cpp
#include <iostream> #include <vector> using namespace std; #include "n.h" using namespace data; int main() { Def("car",100); Set("car",200); cout<<"tab size: " << tab.size() << endl; Def("boat",300); Set("car",400); cout<<"tab size: " << tab.size() << endl; cout<<read_value("car") << endl; cout<<read_value("boat") << endl; system("PAUSE"); }n.h
namespace data { class dc { public: string str; double var; dc(string s,double v) : str(s), var(v) {} }; vector<dc> tab; void Set( string s,double v ) { for(unsigned i=0;i<tab.size();i++) { if ( tab[i].str == s ) { tab[i].var = v; } } } double read_value (string s) { for(unsigned i=0;i<tab.size();i++) { if ( tab[i].str == s ) { return tab[i].var; } } return 0; } bool declared ( string str ) { for (unsigned i=0;i<tab.size();i++){ if(tab[i].str == str ) { return true; } } return false; } double Def ( string str, double var) { if ( declared(str) ){ cout<<"dec error"<<endl; return 1; } tab.push_back( dc ( str ,var)); return 0; } }
-
namespaces grundsätzlich nicht in header dateien! das führt das ganze prinzip doch ad absurdum!
wenn main.cpp nicht ohne funktioniert, dann kommt das auch da rein und nirgends anders.bsp: nehmen wir an du erstellst m.h in der using namespace data; steht. welchen sinn hat dann dein namespace data? korrekt - gar keinen.
im header musst du den typnamen inklusive namensraum angeben, zb so:
class dc { public: std::string str; double var; dc(std::string s,double v) : str(s), var(v) {} };ist bisschen mehr tipparbeit, aber die EINZIG richtige alternative.
-
spermium schrieb:
namespaces grundsätzlich nicht in header dateien! das führt das ganze prinzip doch ad absurdum!
hä? was meinst du? ich denke du meinst eher ein
using namespace Xsollte man in einem header nicht machen. Aber die Verwendung von
namespace x {}im header macht sinn. Ansonsten könntest du ja keine Funktionen oder Klassen in namespaces packen.
-
firefly schrieb:
spermium schrieb:
namespaces grundsätzlich nicht in header dateien! das führt das ganze prinzip doch ad absurdum!
hä? was meinst du? ich denke du meinst eher ein
using namespace Xsollte man in einem header nicht machen. Aber die Verwendung von
namespace x {}im header macht sinn. Ansonsten könntest du ja keine Funktionen oder Klassen in namespaces packen.
der der TE danach fragt ob ein "using namespace" in der header gehört oder nicht, kann man das eigendlich nur falsch verstehen wenn man es auch falsch verstehen will ...
