using namespace std, irgewer riet mir....
-
Irgendwer sagte mal es wäre besser using namespace std;
nicht zu benutzen und std:: immer zu schreiben, ich meine es war
Dravere aus diesem Forum hier, aber ich weiß nicht mehr warum, und was
alles dafür sprach. Ich mache es jetzt automatisch nicht mehr, kann das
aber nicht begründen, würde dies aber gern begründen können, oder das using
in Zukunft wieder benutzen. Advice ?
-
Wenn du ganze namespaces importierst, dann hast du evtl. wieder das Problem, das sie beheben sollen (d.h. Namenskonflikte).
Ich importiere meistens auch nur das, was ich ständig schreiben muss (std::string).
Aber letztendlich ist das Importieren von std kein so großes Problem, da andere libs es natürlich möglichst vermeiden, Namenskonflikte mit der Standardbibliothek einzugehen... und wenn sie es doch machen, musst du deren namespace ja nicht auch noch importieren.
-
using direktiven in Header sollte man auf jeden Fall vermeiden. In einer .cpp-Datei macht es meist wenig Probleme, abgesehen von den von Nanyuki genannten. In solchen Fällen kann man dann aber durch qualifizierte Namen die Unklarheiten wieder auflösen.
-
pumuckl schrieb:
using direktiven in Header sollte man auf jeden Fall vermeiden.
das macht der VC++ Wizard ^^
-
Tim06TR schrieb:
das macht der VC++ Wizard ^^
Wie und wo macht er das?
-
namespace CodeX3 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Zusammenfassung für Form1 /// /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch /// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern, /// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt. /// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen /// arbeiten, die diesem Formular zugewiesen sind. /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // } void Form1::SAFEREF(); void Form1::WriteInformation(std::string IFO); void Form1::Tauschtabelle(std::string TName); protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::ProgressBar^ SafetyBar; private: System::Windows::Forms::ProgressBar^ Fortschritt; protected: protected: private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::Button^ button2; private: System::Windows::Forms::CheckBox^ checkBox1; private: System::Windows::Forms::RichTextBox^ richTextBox1; private: System::Windows::Forms::RichTextBox^ richTextBox2; private: System::Windows::Forms::RichTextBox^ richTextBox3; private: System::Windows::Forms::ComboBox^ Ascii; private: Syste//.......
-
Sofern es keine gute Erklärung für das ^ gibt, sieht mir das sowieso nicht nach C++ aus... (z.B. in System::Windows::Forms::Button^ button1).
-
Das ist auch kein C++ was du da schreibst...
-
1. ist das CLI (das ^ ist dort nen zeiger auf irgendwas, was mittels GC erstellt wurde)
class Form1 { void Form1::SAFEREF(); void Form1::WriteInformation(std::string IFO); void Form1::Tauschtabelle(std::string TName); };
sicher, dass das richtig ist? Oo
private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::Button^ button2; private: System::Windows::Forms::CheckBox^ checkBox1; private: System::Windows::Forms::RichTextBox^ richTextBox1; private: System::Windows::Forms::RichTextBox^ richTextBox2; private: System::Windows::Forms::RichTextBox^ richTextBox3; private: System::Windows::Forms::ComboBox^ Ascii;
autogenerated?
wenn nicht, wieso hast du jedes mal wieder private: mitgeschrieben? ist imho auch in CLI nicht nötig...dann hab ich noch gelesen, dass man den dtor in cli über den finalizer (!Form1()) implementieren sollte - hab ich aber keine ahnung von...
if (components) { delete components; }
delete prüft intern selbst auf NULL/0/nullptr/... wie auch immer man es nennen/schreiben möchte...
das delete hört sich in verbindung mit managed code auch ein wenig falsch an - aber wie gesagt - ich kann kein CLI, solltest du vll mal im richtigen Forum fragen...
bb
-
@unskilled/all:
~T in C++/CLI ist IDisposable.Dispose
!T in C++/CLI ist der Finalizer (also ~T in C#!)
delete p; in C++/CLI ist vollkommen OK - es ruft ~T auf, also IDisposable.Dispose