wohin gehört die Declaration von struct ?



  • Hallo,

    danke Dir trotzdem das Du es Dir angesehen hast.
    Nach dem Problem hier mache ich auch ( versprochen ) nen neuen Thread auf !

    Also Folgendes, das fehlt in dem Projekt. Ich wollte eigentlich mal wissen wie man textBox1->text = L".."; aus einer anderen Classe ändern kann.

    1. die Ableitung der TextBox public machen, das geht aber auch nicht
    Also public: System::Windows::Forms::TextBox^ textBox1;

    Hmm...ich kann aber wohl aus einer anderen Classe auf eine static public funktion der Classe Form1 zugreifen und in der Funktion dann die Eigenschaft text der textBox1 ändern.

    Das ist auch der einzige Weg der mir einfällt...gibts denn da noch ne andere Lösung ?

    Ich hab das ganze Projekt hochgeladen weil ich immer Probleme habe wenn Ihr mir ( netterweise !! ) ein stück code hier reinschreibt, dann ist das zwar echt nett, aber ich weiss manchmal nicht genau wo das jetzt hingehören soll.

    So, jetzt hab ich das Problem das ich hin wie her nicht auf die classe zugriff_3 komme.

    1. Versuch :

    ...
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    ...
    #pragma endregion
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    						 // Hier hab ich nun gar keine Ahnung wie ich am besten auf die Member der
    						 // Classen zugriff_* zugreifen kann ?
    						 // zugriff_3::changeTextBox_3();
    							/*
    							Fehler	1	error C2653: 'zugriff_3': Keine Klasse oder Namespace	e:\eigene dateien\visual studio 2005\projects\projects c++\klassen1\klassen1\Form1.h	105	
    							// Hmmmmmm ????
    							*/
    						 zugriff_3 zg;//::changeTextBox_3^ zg;
    						 }
    
    }; // Ende Class Form1
    
    	ref class zugriff_3: public Form1
    		{
    		public:
    			void changeTextBox_3()
    				{
    					Form1^ F;  // <-- soweit so gut, das könnte gehen oder ?
    					F->textBox1->Text = L"Hallo TextBox aus Classe Zugriff_3";
    					//Form1::changeTextBox();	
    				};
    		};
    
    // Nur weiter oben kan nich doch nicht auf zugriff_3 zugreifen ?
    // <<<<<<<<< private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) { <<<<<<<<<
    // Die kennt der Compiler doch da noch nicht.
    

    Er kennt ja nicht mal die Classe selber bei button1_click ???
    Matthias



  • Du willst Du von extern die textBox1 ändern, oder?

    Warum leitest Du denn die Form1 nochmals ab???
    Mach doch direkt in Form1 eine public Methode/Property, welches Dir die textBox1->Text setzt...

    Ich verstehe Dein Problem nicht so ganz.... Du machst es Dir viel zu kompliziert!

    public ref class Form1 : public System::Windows::Forms::Form
    {
      // ...
      public:
        property String^ MyText
        {
          String^ get() { return this->textBox1->Text; }
          void set(String ^value) { this->textBox1->Text = value; }
         }
      // ...
    }
    

    Und jetzt kannst Du es von extern zuweisen:

    #include "form1.h"
    // ...
    Form1 ^frm = gcnew Form1();
    frm->MyText = "Hallo welt"; // lass bitte das L weg!
    // ...
    


  • Hallo,

    ja das mit property zu machen weiss ich ja wie das geht.
    Mir gings aber genau darum DAS ZU VERSTEHEN WIE ich das mit einer Klasse machen kann die UNTER der Classe Form1 erst Declariert wird oder in einer anderen Datei steht !!

    Darum ging es !
    Ich danke Dir aber trotzdem nochmals für die schöne Erklärung wie das mit property's geht...habs ausgedruckt !
    Das hilft mir ja alles enorm weiter !!

    Ich möchte aber eben auch verstehen wie man sowas mit einer Klasse machen kann, ja umständlich, aber nur zu Informations und lernzwecken.

    Wie soll ich das denn sonst lernen ?

    Matthias



  • Am einfachsten ist es, wenn Du die Klassen-Deklaration in eine H-Datei packst! und dann diese H-Datei in er form1.h ganz oben includierst.
    Dann kannst Du innerhalb der Form1 die andere Klasse verwenden.



  • Hallo,

    hmm, da hatte ich auch schon dran gedacht, schein aber auch so nicht zu gehen.
    Hab folgendes gemacht:

    eine neue Datei inc_klassen.h erstellt mit Inhalt:

    ref class zugriff_3//: public klassen1::Form1
    		{
    		public:
    			void changeTextBox_3()
    				{
    				klassen1::Form1::tbText = "Neuer Text";
    				};
    		};
    

    und in der Form1.h ganz oben folgendes :

    #pragma once
    
    /// das hier, also :
    #include "inc_klassen.h"
    
    namespace klassen1 {
    .
    .
    

    Da bekomme ich aber auch ( ich glaube Logisch ) eine Fehlermeldung die lautet:

    Fehler 1 error C2653: 'klassen1': Keine Klasse oder Namespace e:\eigene dateien\visual studio 2005\projects\projects c++\klassen1\klassen1\inc_klassen.h 7
    Fehler 2 error C2065: 'tbText': nichtdeklarierter Bezeichner e:\eigene dateien\visual studio 2005\projects\projects c++\klassen1\klassen1\inc_klassen.h 7
    Warnung 3 warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust e:\eigene dateien\visual studio 2005\projects\projects c++\klassen1\klassen1\Form1.h 270

    Und genau das ist ja das Problem. Ich glaube da hab ich irgendwas mit den Zugriffen noch nicht verstanden und wäre Euch sehr dankbar weenn ihr mir das an diesem einfachen beispiel erklären könntet.
    Ich könnte dieses Wissen dann auf meine anderen kommenden Probleme anwenden.

    Bitte bitte wenn ihr irgendwelchen Code postet, könntet Ihr dann dazuschrieben wo der hingehört ? Danke Euch !!

    Matthias



  • Kanst Du mir mal sagen, WAS Du überhaupt willst???

    Was soll denn Dein Programm können? Wer soll denn das "changeTextBox_3" aufruefen?
    Du kannst keine Member-Variable verändern oder irgendeinen MemberFunktion/Property aufrufen, bevor Du nicht eine Instanz davon erstellt hast und Du diese Instanz auch kennst!

    Wie schon so oft gesagt: Lerne die Grundlegenden Dinge und fange nicht gleich mit C++/CLI an. Fange mit C# an, da ist alles viel einfacher...



  • Hallo,

    also jetzt nochmal zum Mitschreiben:

    Ich möchte Nichts anderes als Visual C++ mit und ohne .NET lernen.
    Das rührt daher das ich ( früher in Delphi ) einige AddOns für den Microsoft Flugsimulator schreibe. Der Name Hal Bryan sollte Dir als MS Dev partner sicher was sagen.

    So, dazu lese ich ein englisches Tutorial.
    In diesem Tutorial sind halt einige Sachen die ich ncih/noch nicht verstanden habe.

    Dazu habe ich mich hier an das Forum gewendet.
    Mein Problem habe ich erklärt und erkläre es gleich nochmal.
    Und auch wenn es unüblich ist werde ich ein neues Projekt erstellen , packen und auf meinen Server legen damit es für Euch einfacher wird und ihr nicht immer alles nachbauen müsst.

    So, jetzt nochmal ... Es geht noch nicht darum das das was ich machen will irgendwelchen Sinn ergibt. Das sind alles nur Tests um irgendwas zu verstehen !

    So und derzeit geht es um folgendes :

    Eine Classe Form1 mit einer textBox1 und einem button1.
    Eine weitere Classe mit einer Funktion die den Text in der textBox1 ändern soll.
    Dies soll aber geschehen wenn man auf den Button1 clickt !!

    Problem :

    Zugriff unter den Classen.

    hier das Projekt mit Kommentaren drin:
    http://www.starflight-virtual.de/c++/klassen_2.rar

    Das ist doch alles was ich wissen möchte, also wie das geht das ich von der testclasse auf die classe fom1 zugreifen kann und wie ich im onclick des buttons auf die classe zugreife die erst später declariert wird.

    Geht das überhaupt ?
    Es ist hin wie her, schriebe ich die testclasse vor die Form1 classe, dann geht das eine nicht, schrieben ich die testclasse ganz unten rein, dann geht das ander nicht.

    Das ist es was ich erklärt haben möchte. Das ist ja nicht so das ich nicht selber suche oder rumprobier, das mach ich doch schon, sonst würde ich ischer nicht auf solche ideeen kommen oder ?

    MAtthias



  • Dir wurden bereits alle Links etc. gepostet die Du benötigst um Dein Problem zu lösen.

    Das was Dir fehlt an Wissen kannst Du nicht in einem Forum klären. Es sind dermasen schwerwiegende Wissenslücken vorhanden, das man diese nicht im Rahmen einer kurzen Antwort schliessen könnte. Alles was Du gesagt bekommst wird wiederum nicht verstanden weil die Grundlagen fehlen.

    Die Links die ich gepostet habe sollten Dich locker 1 Woche beschäftigen können .

    Ein Forum ist keine private Nachhilfestunde - das "Zugriffsproblem" bekommst Du mit ein wenig lesen im Thema Klassen selbst hin.



  • hallo,

    ok

    Matthias



  • Hallo nochmal,

    eine Frage noch ... falls ich wiedermal ne Frage haben sollte... was darf ich Euch denn Fragen ?

    Matthias



  • Bevor du hier ne Frage reinstellst solltest du dich erstmal einen Monat bemühen die Antwort selbst rauszufinden.



  • hmm,

    also ist das nur ein Leseforum .. ok 😉

    Also Ehrlich, ich hab doch nun eine konkrete Frage gestellt. Warum ich keine Antwort erwarten darf weiss ich nicht !

    Na egal

    Matthias



  • ref class zugriff_3//: public klassen1::Form1
            {
            public:
                void changeTextBox_3()
                    {
                    klassen1::Form1::tbText = "Neuer Text";
                    };
            };
    

    Ich glaube da hab ich irgendwas mit den Zugriffen noch nicht verstanden und wäre Euch sehr dankbar weenn ihr mir das an diesem einfachen beispiel erklären könntet.

    Du kannst keine Member-Variable verändern oder irgendeinen MemberFunktion/Property aufrufen, bevor Du nicht eine Instanz davon erstellt hast und Du diese Instanz auch kennst!

    Konkreter kann die Antwort auf Deine Frage nicht sein.



  • Hallo,

    danke Für die Antwort, aber Du hast meinen Thread nicht gelesen.
    Lad Dir bitte nochmal dieses Projekt herunter.
    Darin sind alle Fragen gestellt !

    http://www.starflight-virtual.de/c++/klassen1.rar

    Danke
    Matthias



  • Vllt. erinnerst Du Dich, das die meisten Beiträge in diesem Thread von mir stammen. Du liest die Antworten nicht.



  • Hallo,

    bin grad von Arbeit gekommen.
    Hab gestern abend noch ein deutsches Tut über klassen und vererbung gelesen. Das Tut hab ich verstanden !
    Habs mit Dev C++ ausprobiert !

    Jedoch bekomm ich das einfach nicht in Visual Studio gebacken, sorry aber irgendwie ist das hier anders.

    Ich habe also versucht eine Classe "test" in eine extra Datei gepackt und versuchte nun auf eine Funktion in dieser klasse zuzugreifen von der Main Class, also der Classe Form1.

    Das Problem ist das ich irgendwie die #includes anscheinend nicht richtig setze.
    Ich lad jetzt das letze mal dieses neue Projekt hoch.
    Könntest Du Dir bitte die Mühe machen und dieses eine Projekt mal so ändern das ich die Funktion "test_Change_Form1_Color" aus dem button1_ am liebsten mit extra Namespace oder dem gleichen, das soll laut irgendeinem Tut das ich mal gelesen habe so wie es in Proj. ist auch gehen.
    Geht aber nicht.

    Kannst Du mir den Gefallen tun ?

    Ich hab sogar in jeder Datei wo ich nicht genau weiss was richtig/falsch ist
    "/// ???" reingemacht, damit du nicht zu viel suchen must. Wenn wir jetzt wieder anfangen uns das Problem gegenseitig zu erklären brauchen wir in diesem Thread oder in einem neuen noch x seiten.

    Also darum die bitte hier
    www.starflight-virtual.de/c++/WA_01.rar
    nur einmal reinzuschauen . dann hab ich ne Vorlage und dann komm ich klar.

    Danke
    Matthias



  • Schau Dir noch mal das Kapitel an, das sich um Instanzierung der Klasse dreht.

    [/cpp]Form1::BackColor = System::Drawing::Color::Blue;[cpp]

    Welche der Instanzen willst Du hier die Farbe zuweisen ?



  • http://www.rothmichael.de/cpp/STF-DIR/WA_01.zip

    Bitte schön. Es wird Dir nichts nützen. Dein Projekt zeigt nur, das Du von dem was Du (ggf.) liest nur wenig verstehst bzw. nicht genug verinnerlichst.



  • Hallo,

    ich danke Dir !!

    "ref class Form1;"

    Werd mir das heute nochmal raussuchen und näheres dazu lesen, aber ich glaube das ist so eine Art prototype der Classe form1, also damit die Classe bekannt ist in der datei test.h.
    Ausserdem auch der parameter der test_change_color... funktion.

    Allerdings steht davon nichts in irgendwelchen Tutorials !
    Ich finde hier immer nur welche in denen es um C++ geht, auch um CLI, aber dort wird nicht darauf eingegangen wie das ganze in VISUAL STUDIO aussieht. In Dev C++ oder VC++ 6 sieht das ganze nämlich ganz anders as.
    Wie soll man das denn dann lernen ohne einen netten Helfer wie Dich ?

    Ich danke Dir !!!
    Bei weiteren Fragen werde ich jetzt einen neuen Thread aufmachen.



  • Ähm,

    was hat standard C++ aussehen mit der IDE zu tun ?
    Definition deklaration forwarddeklaration namespace und instanziieren sind sehen bei jedem Compiler identisch aus.

    In den Tutorials steht davon nicht viel, weil es totale Grundlagen sind und es dafür eigene tutorials geben wird.
    Das ref class Form1 ist eine forwarddeklaration und war nötig um die verschachtelung aufzulösen die Du mit Deinem Beispiel gebaut hast.


Anmelden zum Antworten