Variablenzugriff aus mehreren h-dateien... Habe die Vorgangsweise noch nicht verstanden.



  • Hallo zusammen,

    ich habe das Windows-Verzeichnis ausgelesen und muss den Wert in unterschiedlichen Dateien abrufen können. Wie mache ich das nun am geschicktesten? Habe heute zig Anläufe gemacht und es einfach nicht auf die Kette bekommen.
    Mein Windows-Verzeichnis wird dabei z.B. in der Start.h (Windows Form) ausgelesen. Es gibt zwei Variablen (einmal vom Typ std::string und einmal vom Typ sys::String^), die dabei in der Start.h erzeugt und in dieser sowie in der Passwort.h (ebenfalls Windows Form) verarbeitet werden.

    Vor allem in folgender Befehlszeile bekomme ich dabei einen Fehler:
    WIN = gcnew String(WIN2.c_str());
    Die Variable WIN2 (std::string) wird in der Start.h erzeugt und die gezeigte Zeile in der Passwort.h aufgerufen. Die Fehlermeldung lautet hier, dass alle Typen aus .c_str aus einer Klasse stammen müssen.

    Ich bin für jede Hilfe dankbar.
    Gruß
    Daniel



  • Fehlermeldung: Copy&Paste. Code: Copy&paste.

    Dein Programm besteht nur aus Headerdateien?



  • Nein, .cpp-Dateien wurden natürlich ebenso bei der Projekterstellung erzeugt.



  • @manni66 sagte in Variablenzugriff aus mehreren h-dateien:

    Fehlermeldung: Copy&Paste. Code: Copy&paste.

    @DannyNRW das heißt, Du sollst bitte Code (möglichst ein bis aufs Wesentliche reduziertes Minimalbeispiel, das den Fehler produziert, siehe Du brauchst Hilfe?) und die dazugehörigen Fehlermeldungen hier posten.



  • Start.h (Deklaration):

    using namespace...
    //Global deklarierte Variablen
    std::string WIN2;
    std::string Datei = ("/xwindata32.dll");

    public:
    String^ WIN;
    WIN2 = getenv("WINDIR");
    Win_lbl->Text = gcnew String (WIN2.c_str());
    WIN2 = WIN2 + Datei;
    WIN2 = WIN2.erase(2, 1);
    WIN2 = WIN2.insert(2, "/");
    WIN = gcnew String(WIN2.c_str());

    Passwort.h (Aufruf):
    private: System::Void Uebernehmen_btn_Click(System::Object^ sender, System::EventArgs^ e) {
    if ((Pw_Pw_neu_Eingabe->Text) == (Pw_Pw_wdh_Eingabe->Text))
    {
    //extern std::string WIN2;
    //std::string WIN2;
    String^ WIN;
    //WIN = gcnew System::String(WIN2.c_str()); //Hilfsvariable zum Anzeigen in MessageBox
    WIN = msclr::interop::marshal_as<String^>(WIN2);
    System::IO::StreamWriter ^textDatei = gcnew System::IO::StreamWriter(WIN);
    textDatei->WriteLine(Pw_User_Eingabe->Text);
    textDatei->WriteLine(Pw_Pw_neu_Eingabe->Text);
    //textDatei->WriteLine(Test); //Variable Test in Datei schreiben
    textDatei->Flush();
    textDatei->Close();



  • error C2065: "WIN2": nichtdeklarierter Bezeichner. Das bezieht sich auf die Zeile:
    WIN = msclr::interop::marshal_as<String^>(WIN2);



  • Laß das Programmieren mit C++/CLI sein (das ist nichts für Anfänger), s.a. Windows Forms und Visual C++ MACHT KEINEN SINN!.
    Lerne ersteinmal vernünftig (natives) C++ - dein bisheriger Code ist einfach nur falsch (dir scheinen die Grundlagen bzgl. Klassen-/Funktionsdeklarationen und -Definitionen noch komplett zu fehlen).

    Wenn es dir aber mehr um WinForms geht (d.h. .NET), dann benutze C#.



  • Das hilft mir jetzt leider nicht weiter. Ich muss das Programm in 14 Tagen fertig haben. Grund ist ein Projekt an der FH. Daher wäre ich über Hilfestellungen sehr dankbar. Sonst muss ich schauen, wie ich das anders lösen kann.



  • Dann informiere dich mal über Klassenfunktionen (auch "Methoden" genannt)!



  • Ist ja nicht so, als würde ich mich nicht selbst bemühen, im Gegenteil. Ich habe große Teile des Programms fertig bekommen und bereits eine Lösung, die mir das Windows-Verzeichnis auch aus mehreren h-Dateien ausliest. Diese ist jedoch einfach nicht gut, da ich oben gezeigte Prozedur einfach mehrfach aufrufe und in lokalen Variablen abspeichere. Es ist ganz einfach neu für mich, Variablen über mehrere Dateien zu transportieren und hatte gehofft, ein paar Tipps zu bekommen.



  • Aus meiner Sicht hast du den Stoff nicht verstanden und verinnerlicht. Wenn du das Semester über schon mehrere Testprogramme geschrieben hättest, bei denen du wirklich durchblickst wäre das Arbeit von max einem Nachmittag. Anstatt weiterhin blind irgendwas zusammenzukopieren, nachdem dir hier ein paar Leute Codebrocken hinwerfen empfehle ich dir, dass sein zu lassen und dich nächstes Semester richtig dahinter zu klemmen und jetzt auf Sachen zu konzentrieren, wo realistische Chance auf ein gutes Ergebnis bestehen.



  • Herzlichen Dank für die Tipps. Ich erwarte keine Lösungen, aber produktive Denkanstöße wären nett gewesen.


Anmelden zum Antworten