mikrocontroller.net

Forum: PC-Programmierung Wie String anlegen unter Visual Studio 2008 C++?


Autor: Freaky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mit Microsoft Visual Studio C++ 2008 ein kleines Programm 
schreiben, mit dem ich zum Beispiel alle Verzeichnissnamen von meiner 
Musiksammlung in eine Textdatei abspeichern kann. Ich weiss zunächst gar 
nicht wie ich dort einen string anlegen kann.
string dir="c:\\";

Da mekert der Compiler. Verstehe das nicht.

Autor: sucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wat meckert er denn? String header nicht eingebunden? 
Doppelbackslashproblem?

Autor: Freaky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlermeldung:

Kompilieren...
ReadFolder.cpp
d:\informatik\visual_studio\c++\readfolder\readfolder\readfolder\Form1.h 
(87)  : error C2065: 'string': nichtdeklarierter Bezeichner
d:\informatik\visual_studio\c++\readfolder\readfolder\readfolder\Form1.h 
(87)  : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'dir'
d:\informatik\visual_studio\c++\readfolder\readfolder\readfolder\Form1.h 
(87)  : error C2065: 'dir': nichtdeklarierter Bezeichner

Programmcode:
#pragma once


namespace ReadFolder {

  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.
      //
    }

  protected:
    /// <summary>
    /// Verwendete Ressourcen bereinigen.
    /// </summary>
    ~Form1()
    {
      if (components)
      {
        delete components;
      }
    }
  private: System::Windows::Forms::Button^  button1;
  protected: 

  private:
    /// <summary>
    /// Erforderliche Designervariable.
    /// </summary>
    System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
    /// <summary>
    /// Erforderliche Methode für die Designerunterstützung.
    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    /// </summary>
    void InitializeComponent(void)
    {
      this->button1 = (gcnew System::Windows::Forms::Button());
      this->SuspendLayout();
      // 
      // button1
      // 
      this->button1->Location = System::Drawing::Point(22, 42);
      this->button1->Name = L"button1";
      this->button1->Size = System::Drawing::Size(89, 22);
      this->button1->TabIndex = 0;
      this->button1->Text = L"button1";
      this->button1->UseVisualStyleBackColor = true;
      this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
      // 
      // Form1
      // 
      this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
      this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
      this->ClientSize = System::Drawing::Size(292, 273);
      this->Controls->Add(this->button1);
      this->Name = L"Form1";
      this->Text = L"Form1";
      this->ResumeLayout(false);

    }
#pragma endregion
  private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
       {
         string dir="c:\\";


       }
  };
}

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ih... Managed C++ kann man benutzen, muss man aber nicht. Noch nie 
benutzt. Da man das gesamte .net-Framework nutzen kann, wolltest du 
wahrscheinlich einen String und keinen string.

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich damit zum Ausdruck bringen wollte: C++ (und damit vermutlich! 
kenn mich damit nicht aus -- auch Managed C++) ist case-sensitive.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <string>
...
   std::string   dir="c:\\";

Autor: Freaky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich danke euch. Mit welchen Funktionen kann man in .Net Framework 
Verzeichnisnamen auslesen?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus Wachtler
Was soll das mit dem stl string ? Wenn man keine Ahnung hat ...

private: System::Void button1_Click(System::Object^  sender, 
System::EventArgs^  e)
       {
         String ^dir="c:\\"
       }
  };

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine kleine Funktion um alle Dateien unterhalb des Basispfades 
aufzulisten (GetFiles und GetDirectories erlauben auch die Angabe von 
Suchmustern ala *.txt)
    
    private void recDir(string basePath, List<string> files) {
        var dirs = Directory.GetDirectories(basePath);
        foreach (var s in Directory.GetFiles(basePath)) {
            // do something
            files.Add(s);
        }
        foreach (var d in dirs) {
            recDir(d, files);
        }
    }
p.s. keine Lust das in Managed C++ umzuschreiben...

Autor: Freaky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich finde das neue C++ unter Visual Studio 2008 echt bescheuert und 
umständlich. Warum kann ich nicht die alten Funktion verwenden.

Autor: Freaky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube ich bleibe ich bleibe doch bei C#. Das ist um einiges 
einfacher.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast schrieb:
> @ Klaus Wachtler
> Was soll das mit dem stl string ? Wenn man keine Ahnung hat ...
>
> private: System::Void button1_Click(System::Object^  sender,
> System::EventArgs^  e)
>        {
>          String ^dir="c:\\"
>        }
>   };


Wenn man keine Ahnung vom Semikolon hat...

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Freaky schrieb:
> Ich finde das neue C++ unter Visual Studio 2008 echt bescheuert und
> umständlich. Warum kann ich nicht die alten Funktion verwenden.

Kann man schon, wenn man ein normales Win32-Projekt erzeugt und kein 
CLR-Projekt...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Freaky schrieb:
> Ich glaube ich bleibe ich bleibe doch bei C#. Das ist um einiges
> einfacher.

C++ und .NET gleichzeitig ist in der Tat krank.

Entweder .NET (wenn es unbedingt sein muß mit C#), oder
C++ mit einer vernünftigen Umgebung.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Freaky schrieb:
>> Ich glaube ich bleibe ich bleibe doch bei C#. Das ist um einiges
>> einfacher.
>
> C++ und .NET gleichzeitig ist in der Tat krank.
>
> Entweder .NET (wenn es unbedingt sein muß mit C#), oder
> C++ mit einer vernünftigen Umgebung.

Das macht C++ auch nicht besser (SCNR).

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist schlecht an C++? Die Leute, die sich vergeblich daran versuchen? 
:-)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, die Tüte von Konzeptfehlern und Hürden, die man vermeiden wollte:
http://yosefk.com/c++fqa/defective.html

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Was ist schlecht an C++? Die Leute, die sich vergeblich daran versuchen?
> :-)

Der Link von Sven P. reicht eigentlich schon...
Hinzukommen u.a. noch diverse "vergessene Features"
- Reflection ist nicht vorhanden
- Introspection so gut wie unbrauchbar
- Closures (erst in C++0x)
- keine dynamischen Features wie Code-Generierung zur Laufzeit
- etc. pp.

Autor: Freaky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab nichts gegen C++. C++ progrtammieren unter Micosoft Visual 
Studio C++ 2008 ist ein echter Krampf. Konsole Programme mit C++ sind 
kein Problem, aber sobald man win WinForm Anwendung machen möchte, dann 
ist das echt kompliziert mit dem .NET Zeugs.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der Link von Sven P. reicht eigentlich schon...

Typischer Text von jemandem, der C++ nicht verstanden hat. Ich tippe auf 
einen Java- oder C#-Programmierer, der versucht, den dort üblichen 
Programmierstil auf C++ zu übertragen, dabei scheitert und die Schuld 
daran nicht seinem fehlerhaften Ansatz, sondern der Sprache gibt.
An manchen seiner Punkte mag was dran sein, aber einiges ist einfach nur 
Unsinn.

Autor: Freaky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Rolf Magnus, ich denke da leider nicht so. Mit Sicherheit gibt es 
bestimmt zahlreiche Programmierer die das Visual Studio C++ verfluchen 
werden. Aber egal, kannst du mir ein guten Skript bzw. Tutorial 
(deutsch) empfehlen, mit dem der Einstieg der C++ Programmierung unter 
Visual Studio erleichtert?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Freaky schrieb:
> Hi Rolf Magnus, ich denke da leider nicht so. Mit Sicherheit gibt es
> bestimmt zahlreiche Programmierer die das Visual Studio C++ verfluchen
> werden. Aber egal, kannst du mir ein guten Skript bzw. Tutorial
> (deutsch) empfehlen, mit dem der Einstieg der C++ Programmierung unter
> Visual Studio erleichtert?

Du musst als allererstes unterscheiden zwischen C++ und dem was sich MS 
als 'managed C++' vorstellt. Beides hat eigentlich nicht mehr viel 
miteinander zu tun. MS möchte damit C++ Programmierer in die .Net 
Schiene ziehen. Für .Net ist aber auch das 'managed C++' meiner Meinung 
nach nicht besonders gut geeignet. Mit C# oder VB fährt man da 
wesentlich besser. Die Prinzipien von .Net laufen den Prinzipien von C++ 
(also der nicht managed Version) einfach zuwieder.

Visual Studio ist für beides geeignet. Und auch als reines C++ System, 
so wie sich Stroustrup das vorgestellt hat, ist VS ein tatsächlich sehr 
brauchbares System.

Wenn du also C++ programmieren willst, mach dich mit der Bedienung von 
VS vertraut, kauf dir einen Stroustrup und fang zu lernen an.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.