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


von Freaky (Gast)


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.
1
string dir="c:\\";

Da mekert der Compiler. Verstehe das nicht.

von sucher (Gast)


Lesenswert?

Wat meckert er denn? String header nicht eingebunden? 
Doppelbackslashproblem?

von Freaky (Gast)


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:
1
#pragma once
2
3
4
namespace ReadFolder {
5
6
  using namespace System;
7
  using namespace System::ComponentModel;
8
  using namespace System::Collections;
9
  using namespace System::Windows::Forms;
10
  using namespace System::Data;
11
  using namespace System::Drawing;
12
13
  /// <summary>
14
  /// Zusammenfassung für Form1
15
  ///
16
  /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
17
  ///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
18
  ///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
19
  ///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
20
  ///          arbeiten, die diesem Formular zugewiesen sind.
21
  /// </summary>
22
  public ref class Form1 : public System::Windows::Forms::Form
23
  {
24
  public:
25
    Form1(void)
26
    {
27
      InitializeComponent();
28
      //
29
      //TODO: Konstruktorcode hier hinzufügen.
30
      //
31
    }
32
33
  protected:
34
    /// <summary>
35
    /// Verwendete Ressourcen bereinigen.
36
    /// </summary>
37
    ~Form1()
38
    {
39
      if (components)
40
      {
41
        delete components;
42
      }
43
    }
44
  private: System::Windows::Forms::Button^  button1;
45
  protected: 
46
47
  private:
48
    /// <summary>
49
    /// Erforderliche Designervariable.
50
    /// </summary>
51
    System::ComponentModel::Container ^components;
52
53
#pragma region Windows Form Designer generated code
54
    /// <summary>
55
    /// Erforderliche Methode für die Designerunterstützung.
56
    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
57
    /// </summary>
58
    void InitializeComponent(void)
59
    {
60
      this->button1 = (gcnew System::Windows::Forms::Button());
61
      this->SuspendLayout();
62
      // 
63
      // button1
64
      // 
65
      this->button1->Location = System::Drawing::Point(22, 42);
66
      this->button1->Name = L"button1";
67
      this->button1->Size = System::Drawing::Size(89, 22);
68
      this->button1->TabIndex = 0;
69
      this->button1->Text = L"button1";
70
      this->button1->UseVisualStyleBackColor = true;
71
      this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
72
      // 
73
      // Form1
74
      // 
75
      this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
76
      this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
77
      this->ClientSize = System::Drawing::Size(292, 273);
78
      this->Controls->Add(this->button1);
79
      this->Name = L"Form1";
80
      this->Text = L"Form1";
81
      this->ResumeLayout(false);
82
83
    }
84
#pragma endregion
85
  private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
86
       {
87
         string dir="c:\\";
88
89
90
       }
91
  };
92
}

von der mechatroniker (Gast)


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.

von der mechatroniker (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

1
#include <string>
2
...
3
   std::string   dir="c:\\";

von Freaky (Gast)


Lesenswert?

Ich danke euch. Mit welchen Funktionen kann man in .Net Framework 
Verzeichnisnamen auslesen?

von gast (Gast)


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:\\"
       }
  };

von Arc N. (arc)


Lesenswert?

Eine kleine Funktion um alle Dateien unterhalb des Basispfades 
aufzulisten (GetFiles und GetDirectories erlauben auch die Angabe von 
Suchmustern ala *.txt)
1
    
2
    private void recDir(string basePath, List<string> files) {
3
        var dirs = Directory.GetDirectories(basePath);
4
        foreach (var s in Directory.GetFiles(basePath)) {
5
            // do something
6
            files.Add(s);
7
        }
8
        foreach (var d in dirs) {
9
            recDir(d, files);
10
        }
11
    }
p.s. keine Lust das in Managed C++ umzuschreiben...

von Freaky (Gast)


Lesenswert?

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

von Freaky (Gast)


Lesenswert?

Ich glaube ich bleibe ich bleibe doch bei C#. Das ist um einiges 
einfacher.

von Klaus W. (mfgkw)


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

von Arc N. (arc)


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

von Klaus W. (mfgkw)


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.

von Arc N. (arc)


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).

von Klaus W. (mfgkw)


Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

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

von Arc N. (arc)


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.

von Freaky (Gast)


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.

von Rolf Magnus (Gast)


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.

von Freaky (Gast)


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?

von Karl H. (kbuchegg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.