wohin gehört die Declaration von struct ?



  • sPerson Person = {"Vorname", "Nachname",0,0};
    							 // Warum geht das denn nun wieder nicht ?
    							 // da vertsehe ich auch die Hilfe wieder nicht.
    							 // Wo ist da der Unterschied von Pair_correct1 zu meiner definition ?
    
    ref struct sPerson    // <-- 
      { 
    	public:
    		String^ Vorname; 
    		String^ NachName; 
    		double Weight; 
    		double Height; 
      };
    

    Es gibt keinen Konstruktor der die Daten entgegen nimmt. Hierzu bitte ein Tutorual/Buch lesen das sich rund um Klassen beschäftigt. Das Wissen wirst Du unbedingt benötigen wenn Du mit .Net arbeiten willst. Schau Dir das Beispiel der Hilfe mal genau an, da wirst Du sehen, das die dort gezeigte Klasse mehr ist als ein struct. (Nein, ich zeige bewusst nicht wie der Konstruktur ausschaut - das Wissen solltest Du Dir erarbeiten weil es sehr wichtig ist dies verinnerlicht zu haben.)

    Zur Tetbox: Du musst noch ein \r\n einfügen um einen Zeilenumbruch zu erzeugen.

    Zur fehler.h:

    //using namespace System; <-- sowas nicht in einem Header schreiben
    
    namespace Designer_fehler
    {
    
    ref struct sPerson    // <-- 
      { 
    	public:
    		String^ Vorname; 
    		String^ NachName; 
    		double Weight; 
    		double Height; 
      };
    
    }
    

    Das ist jetzt eine Empfehlung, wie gesagt hängt das vom Stil und Einsatz der Struktur ab.

    Mal ein paar Links die sich zu lesen lohnen hier aus dem Forum:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-61231.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39485.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39484.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39483.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39459.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-126465.html (werd ich selbst gleich lesen)

    Und vllt. noch ein wenig über Namespaces:
    http://www.google.de/search?sourceid=navclient&aq=t&hl=de&ie=UTF-8&rls=GGLJ,GGLJ:2006-39,GGLJ:de&q=C%2B%2B+namespaces

    Das schaut erst mal viel aus, ist es aber nicht und hilft Dir sicherlich enorm weiter , ebenso den Antwortenden weil man einfach ein wenig was vorraussetzen kann und die Antworten dann klarer werden 🤡



  • Hallo,

    ich weiss nicht genau ob wir jetzt aneinander vorbei reden.

    Also hier mal eine exemplarische Vorgehensweise um den Fehler ( is ne Warnung !! ) zu reproduzieren:

    -Ein neues Windows Form Projekt erstellen
    (Datei->Neu->Projekt->// in dem erscheinenden Fenster // Visual C++->CLR->Windows Forms-Anwendung )
    [ ich habs mit Absicht so genau beschrieben ]

    Dann bekommt man doch ein neues Projekt mit vershciedenen Dateien zusammengestellt.
    (Form1.h, -> Form1.resx, resource.h, stdafx.h)
    (Assemblerinfo.cpp, stdafx.cpp)
    (app.ico, app.rc)
    (ReadMe.txt)

    So, in der Form1.h mal ( zum test ) folgendes in Zeile 3 einfügen, also direkt unter #pragman once

    value struct test2
    	{};
    

    Das funktioniert bei mir. Nun gibt es aber auch ein ref struct, also einfach die eingefügte Zeile in :

    ref struct test2
    	{};
    

    und siehe da wenn man jetzt die Registrierkarte Form1.h[Entwurf] anschaut hat man den Salat.

    Und unten bei Warnungen steht bei mir folgenedes :

    Warnung 1 Either VCProject or VCCodeModel is not ready yet. Please close designer and try again. 0 0

    Also kann es nicht an einem anderen Code Schnipsel liegen oder ?
    Ich hab ja nur diese eine Zeile geändert und auch nur das überhaupt eingefügt. Ansonsten ist es ja ein absolut leeres Projekt.

    Nun kann es gut sein das das struct dort an der falschen stelle ist ( was ich ja unter anderem versuche rauszukriegen ) oder ?

    Ändert man jetzt "ref" wieder in "value" UND SCHLIE?T DIE REGISTRIERKARTE Form1.h[Entwurf] UND ÖFFNET SIE DANN NEU geht es wieder, also die Form wird im Designer wieder angezeigt.

    Wenn ich den Fehler markiere bekomme ich die Seite

    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.de/dv_vccomp/html/3595d66e-cf87-4fda-a896-c0cd81f95db4.htm

    in der Hilfe angezeigt. Ist das bei Dir die gleiche ? Vielleicht stimmt ja was mit meiner Hilfe nicht ?

    Die seite fängt so an :

    Fehlermeldung
    'Funktion': Konvertierung des Parameters Nummer von 'Typ1' in 'Typ2' nicht möglich
    'function' : cannot convert parameter number from 'type1' to 'type2'

    Ein Parameter kann nicht in den erforderlichen Typ konvertiert werden. Dies kann passieren, wenn Sie eine Instanz einer Klasse erstellen und versuchen, eine implizite Konvertierung für einen Konstruktor durchzuführen, der mit dem Schlüsselwort explicit gekennzeichnet ist.
    .
    .
    .

    Da steht natürlich noch ein bischen mehr, aber nichts von ref struct !?

    Das scheint also irgendwie gar nichts mit dem Fehler zu tun zu haben oder ?

    Ist das bei Dir/Euch auch so ? Kannst Du/Ihr das jetzt nachvollziehen ?

    Danke für Deine/Eure Mühe
    Matthias



  • Hallo,

    jetzt haben wir gleichzeitig geschrieben 🙂

    Ich lese mir das auf alle fälle in ruhe durch !! Keine Frage !!

    Meld mich dann wieder. So hast Du / Ihr auch ein bischen mehr zeit wegen dem letzten Post. Das dauert ja doch ein bischen das genau nachzuvollziehen.
    Würd mich aber schon interessieren ob der Fehler auch bei Euch ist und hauptsächlich auch ob die gleiche Hilfe Seite angezeigt wird ?

    Matthias



  • Dein Problem mit dem Designer kann ich nachvollziehen, ja.

    Ich werde zu
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.de/dv_vsnav/html/b7f6d45a-733b-4ad8-bc2f-737a37509e56.htm

    geschickt. Eigentlich richtig sollte sein:

    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.de/dv_mancli/html/cf610bf4-5fe4-471c-bce7-6a05ece07bd2.htm



  • Knuddlbaer schrieb:

    > Ja das Problem gibt es bei mir auch.

    [...]
    Workaround:

    Pack die Struktur in einen weiteren Header und includiere diesen in Form1.h . Der Parser bekommt so die struct nicht zu sehen.

    Da stand eigentlich schon das es das Problem auch wo anderst gibt.



  • Hallo,

    sorry, aber siehste nun das ich nicht nur blödsinn und unsinnige Fragen stelle !
    Wie kann ich denn Ahnen das mit meiner Hilfe irgendwas nicht stimmt ?

    Na ok, ich möchte DIESE Diskusion jetzt bitte lasse...ich streng mich schon an !

    Rückfrage :
    Ist das jetzt die richtige Hilfeseite ? Bei mir steht oben in dem blauen Teil:

    Fehlermeldungen für Windows Forms
    Fehlermeldungen im Windows Forms-Designer

    Falls das die richtige ist bin ich noch am suchen welche der dort aufgelisteten hier zutrifft ?
    Die richtige hab ich bisher noch nicht gefunden.

    Andere Frage noch : Hast Du vielleicht ne Ahnung wieso ich da auf der falschen Seite in der Hilfe rauskomme ?

    Bei deinem Workaround bin ich gerade dabei....

    Wow... coole Sache, das funktioniert !!! Danke !!

    Hab das ganze wieder zusammengepackt und hochgeladen.
    Wenn Du Lust haben solltest könntest Du es Dir ja mal anschauen. Vielleicht mach ich doch noch irgendwas falsch.
    Eine Frage .... siehste wenn Du Dir das Projekt anschaust ... hätte ich noch.Damit hab ich schonmal rumprobiert und keinen Erfolg gehabt.

    Also es gibt im Delphi ein Memo. Das kennst Du sicher. Da konnte man ganz einfach Zeilen anfügen mit memo1.Lines.Add("irgendwas");
    Nun, in VC++ scheints das nicht zu geben . Ich hab also nur eine textBox1.
    Bei der kan nich aber dafür eine Eigenschaft Multiline einstellen....cool dachte ich, denn ein textBox1->Lines->Add oder so hab ich nicht gefunden !?

    Hättest Du da nen Tip wie das geht ?
    Wenn nicht ist nicht schlimm, ist ersten (noch ) nicht wirklich wichtig, sondern nur aus interesse und vorausschauend weil ich weiss das ich das mal brauchen werde.

    Matthias

    Link vergessen : http://www.starflight-virtual.de/test.rar



  • Hallo,

    ich hab in der Hilfe zu dem erzeugten Fehler des Formdesigners keinerlei Hilfe gefunden. Es gibt lediglich viel Text zum Thema VCCodeComponent (oder wie das hies) aus dem man dann mit Transferwissen etwas anfangen kann.

    Warum Du auf der Hilfe nicht auf der passenden Seite gelangst weiß ich nicht. Da ist die IDE etwas eigen. Bei mir wird, wenn im Fehler/Warunungsfenster ein Thema steht zu das keine Hilfe gefunden wird, die Hilfsseite für die Liste selbst aufgerufen. Warum Du zur Typumwandlung gelangst ka, da kann Dir aber Microsoft helfen.

    Die Seite die ich Dir nannte findet man, wenn man nach Fehlermeldungen Formdesginer googelt bzw. die Hilfe danach durchsucht. Es gibt oft die Information nicht direkt sondern man muss sich diese auf Umwegen zusammen suchen.

    Zur Textbox (hab ich wohl versehentlich wegeditiert in einem der Beiträge).
    Auf die schnelle fällt mir nur \r\n ein im Text.

    Mach mal folgendes:
    Dialog auf -> Textbox makieren -> F1 drücken.

    Nach unten Scrollen zu Siehe auch und folgenden Link anklicken:
    Gewusst wie: Anzeigen mehrerer Zeilen im TextBox-Steuerelement in Windows Forms



  • Hallo,

    hmm, ist schon komisch mit der Hilfe.
    Könnte aber vielleiucht auch mein Fehler ( wiedermal ) sein. Ich habe zuerst die Express Versionen installiert, also C++ un C# und danach auch noch Borland Developer Studio. Alle installieren ein .NET Framework, alle verlangen ja auch zugriff auf die Dateien. Vielleicht liegts daran.
    Ich werd vioelleicht mal alles runterschmeißen und nochmal sauber installieren.

    zur Hilfe noch ... das ist es eben. Ich bin da von Delphi vielleicht ein bischen verwöhnt. Da musste man sich nichts "zusammensuchen" oder so. F1 drücken und man bekommt da auch wirklich Hilfe zu jedem Befehl und wenn nicht, dann hat man sich verschrieben oder den Befehl gibts gar nicht.
    Aber daran gewöhne ich mich...bitte um Nachsicht.

    Die Frage mit der TextBox ist genau so ein Beispiel .. nicht genug/genau genug gelesen.

    Nun aber zu dem test projekt nochmal kurz. Hast Du das mal aufgerufen ?
    Steht das da alles an der richtigen stelle oder würdest Du das irgendwie anders machen ?
    Wie schon erwähnt...ich blicke bei der Dateistrucktur noch nicht richtig durch zu was die alle gut sind ?
    stdafx.cpp und stdafx.h z.B. braucht man die später erst oder zu was sollen die gut sein ?

    Wenn ich dashier aus der stdafx.h

    // stdafx.h : Includedatei für Standardsystem-Includedateien
    // oder häufig verwendete projektspezifische Includedateien,
    // die nur in unregelmäßigen Abständen geändert werden.
    #pragma once
    
    // TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen.
    

    richtig verstehe hätte ich die struct.h auch hier einbinden können oder ?
    Mach das nun einen Unterschied oder ist es egal oder wie ist das ?

    Hab das jetzt nicht ausprobiert....bin aber dabei !

    Danke
    Matthias...es wird doch 🕶



  • Nachtrag ...

    wo wird denn eigentlich die stdafx.cpp geladen / includet ?
    Ich hab in der AssemblyInfo.cpp nur die stdafx.h gefunden.

    Wioe gesagt, ich versteh den zusammenhang nicht

    Matthias

    PS.: textBox1->AppendText(t.str+"\r\n"); .. geht herforragend !! danke



  • Hallo,

    nochmal zur Hilfe, da schein wirklich irgendwas nicht zu stimmen.

    Wenn ich AppendText markiere und F1 drücke lande ich hier :
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.de/cpref8/html/M_System_IO_File_AppendText_1_16219e3a.htm

    ist das normal ? Hat doch gar nichts mit der TextBox zu tun.
    unten steht aber auch keine Alternative drin. Sicher kann man jetzt AppendText links zum suchen eingeben....is klar

    Wenn ich allerdings textBox1->AppendText markiere lande ich hier :
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.de/cpref8/html/M_System_IO_File_AppendText_1_16219e3a.htm

    in der Online Hile auf MSDN2....komisch irgendwie

    Matthias



  • Daran wirst Du Dich gewöhnen müssen. Auch im .Net Framework allgemein, da sucht man sich nen Wolf. Oft landet man dann im Forum weil man einfach nichts findet oder die Suchbegriffe fehlen. Es gibt dann den Suchbegriff und man sucht weiter damit.

    Auch wirst Du in C++ an einigen Stellen unwissen akzeptieren müssen. Es gibt oft A das zum Verständnis B benötigt. B wiederum braucht zum vollendeten verständnis A. So muss man erst mal bei einem von beiden mit ner Lücke leben.

    .cpp Dateien werden nicht includiert. Jede .cpp wird vom Compiler übersetzt und zu einer Objektdatei gemacht. Die .cpp wissen nichts voneinander. Erst der Linker bringt die Objekte zusammen. (So wäre der nächste Tipp: Wenn sich mal etwas nicht kompilieren lässt, Unit für Unit einzeln Übersetzen. Wenn alles richtig ist, muss sich jede Unit einzeln übersetzen lassen).

    Jede dieser Units muss ja aber die Informationen herbekommen was Form1 ist, was sPerson ist etc. Diese Informationen stellt man mit der Deklaration zur Verfügung die man üblicherweise in einen Header packt.

    stdafx nimmt beim VC IMHO eine sonderstellung ein, da kommt alles rein was alle sehen sollen. So wird Dir sicherlich aufgefallen sein, das die stdafx.h überall includiert wird. Hinzu kommt, das die vorkompilierten Headerdateien durch stdafx.h makiert werden (details kann ich Dir nich sagen, nie mit auseinandergesetzt).

    Insgesammt ist es ein sehr großes Thema für .cpp .h definition und deklaration.

    Situationsbetrachtung:

    Ausgangspunkt:

    sPerson.h enhält folgenden Code:

    ref class sPerson
    {
       System::String ^ Name;
        [...]
       public:
         System::Void    aufwecken()
         {
            if(chef_in_der_naehe() && schlaeft())
               schlagen();
            else
               sanft_ruetteln;
         }
    
    }
    

    Wir haben 20 Dialoge von denen 10 mit sPerson umgehen. Wir überlegen uns nun: Packen wir doch sPerson.h per include in stdafx.h - dann hat jeder was von und ich muss mir keine Gedanken machen. Denn wenn der 11. Dialog sPerson braucht, ist sPerson da und ich kann einfach faul sein.

    Ok, gemacht getan. Wir sind ja alle faul.

    Nun haben wir das Projekt einmal vollständig übersetzt. Wir ändern sPerson nun ab:

    ref class sPerson
    {
       System::String ^ Name;
       System::Int16    alter;
        [...]
       public:
         System::Void    aufwecken()
         {
            if(chef_in_der_naehe() && schlaeft())
               schlagen();
            else
               sanft_ruetteln;
         }       
    }
    

    Wir drücken übersetzen und merken, das der Compiler alle 20 Dialoge übersetzt. Schlussfolgerung: Überall wo ein Header eingebunden wird und sich dieser direkt oder indirekt ändert, muss alles, was diese Informationen per Include zieht (wie gesagt, das kann auch indirekt erfolgen!!) neu übersetzt werden.

    Natürlich reicht unser Kuchen nicht und der Compiler arbeitet immer noch. Das dauert uns einfach zu lang, es muss eine Lösung her.

    Also sPerson wieder aus stdafx.h entfernen und nur in die Dialoge einbinden, die sPerson wirklich benötigen. Nun das Projekt vollständig übersetzen - fertig.

    Nun müssen wir aber noch was an der definition von sPerson ändern. Denn wenn Feierabend ist, wird der Kollege auch geschlagen. Wer will schon nach Feierabend ewig da rumzerren bis der wach wird ?

    ref class sPerson
    {
       System::String ^ Name;
       System::Int16    alter;
        [...]
       public:
         System::Void    aufwecken()
         {
            if(schlaeft() && (chef_in_der_naehe() || feierabend()))
               schlagen();
            else
               sanft_ruetteln;
         }       
    }
    

    Ein Druck auf F7 zeigt uns, er compiliert wieder alle 10 Dialoge. Aber warum ? Eigentlich ist es doch egal, der Compiler muss doch in den Dialogen nur wissen, wie die Schnittstelle ausschaut. Der Inhalt ist doch völlig uninteresannt. (Ich hab nie ein Buch über Compilerbau gelesen, aber IMHO wird einfach das Dateidatum/zeit herangezogen um eine Änderung zu erkennen).

    So, wir sitzen wieder schmollend vor der Kiste. Kuchen ist alle und Langeweile macht sich breit. Wir haben ja die Schnitstelle bereits abgesprochen und an der Deklaration wird sich so schnell nichts mehr ändern. Aber in der Definition müssen wir noch oft ran, wir sind uns da einfach unschlüssig. Aber so viel Kuchen können wir garnicht essen wie wir Compilerdurchläufe machen müssten.

    Was könnte helfen ?

    Wir trennen die Deklaration und die Definition. Die Definition kloppen wir in sPerson.cpp und erhalten folgendes:

    ref class sPerson
    {
       System::String ^ Name;
       System::Int16    alter;
        [...]
       public:
         System::Void    aufwecken();
    }
    
    System::Void    sPerson::aufwecken()
         {
            if(schlaeft() && (chef_in_der_naehe() || feierabend()))
               schlagen();
            else
               sanft_ruetteln;
         }
    

    Ab jetzt können wir immer, zur Syntaxprüfung, sPerson.cpp alleine übersetzen und schauen ob alles ok ist uns müssen nich alles Übersetzen.

    So, nun sind wir sauer auf unseren kollegen weil der so viel pennt und nix schafft. Also wollen wir den nun immer schlagen und packen die Definition an:

    System::Void    sPerson::aufwecken()
         {
               schlagen();
               schlagen();
               schlagen();
         }
    

    Nun wieder F7 gedrückt und siehe da - es wird sPerson.cpp compiliert und danach geht schon der Linker ans Wek.

    Nun haben die Compilerbauer noch vorkompilierte Header erfunden um diesem Effekt entgegen zu treten. Soll heissen: So extrem ist es nicht mehr wie vor 10 Jahren. Leider wird dadurch die Abhängigkeit der Dateien ständig unter den Tisch gekehrt und nurnoch rumgemurkst.

    Das war jetzt 1 Aspekt der .cpp und .h Dateien. Es gibt viele weitere die man berücksichtigen muss / sollte / kann. Templates, inline um mal zwei wichtige Themen genannt zu haben. Auch sind Namespace über die Jahre hinweg ein sehr wichtiges Werkzeug geworden. Forwarddeklarationen gehören zu dem .h und .cpp Spiel ebenfalls hinzu wie Mehrdeutigkeiten.

    Warum nun MS alles in den Header packt weiß ich nicht. Ich denke, da hatte man keine Lust die .cpp auch noch zu parsen. Ich persönlich trenne nach wie vor streng zwischen deklaration und definition.

    Fazit:

    Im Header möglichst nur Deklarationen haben (wie immer gibt es ausnahmen) und im Header die Definitionen. Nur das includieren was wirklich benötigt wird. using namespace nur in .cpp Dateien . Und schon muss der Compiler weniger ackern, die möglichen Fehler werden automatisch weniger und das Design wesentlich übersichtlicher.

    Und nun bete ich, das ich Definition und Deklaration nicht durcheinander geschmissen hab 🤡

    Ahja, eine Definition ist auch gleichzeitig eine Deklaration.

    Pps.: Der Text hat jetzt 40 Minuten gebraucht und es war nur ein ganz kleiner Ausflug zum Thema .cpp und .h. Vieles was man dazu noch sagen könnte sind Nebenprodukte anderer Themen wie forwarddeklaration, templates und inline sowie export etc.

    Du wirst immer , wenn Du fertig bist, alles neu machen wollen, weil Du weisst wie es besser gegangen wäre.

    Manchmal ist es aber auch einfach die wirtschaftlichkeit die einen Zwingt. Ich habe ein Projekt mit 20 Dialogen, 30 Datasets und viele Hilfsklassen . Da sind z.B. 7 Dialoge identisch vom Grundaufbau her. Es hat mich angekotzt das ich alles an Funktionalität neu machen musste. Ich hätte am liebsten den Grundaufbau gemacht und dann den Dialog vererbt.

    Irgendwann kam genug KnowHow um das etwas generischer zu gestalten. Events eintragen etc also nurnoch die Oberfläche neu gestalten. Aber das führte dann dazu, das ich die Menüs , ToolboxButtons und DataGridViews hätte alle per Hand setzen initialisieren etc. hätte müssen und den Formdesigner nicht hätte nehmen können.

    Nach einer Weile und vielen sonderwünschen sehen sich die Dialoge nurnoch grob ähnlich und gleichen sich nurnoch in etwa 40% der Funktionen. Hätte ich alles zusammen gelegt hätte ich lange daran arbeiten müssen das wieder zu zerpflücken.

    Also kurz: Der Kunde zahlt nicht den Idealsten Quellcode und man muss leider manchmal mit unschönheiten leben.



  • FileAppend gibt es einfach in vielen Methoden.

    Such nach dem Hauptelement und gehe über die Member.

    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.de/CPref17/html/M_System_Windows_Forms_TextBoxBase_AppendText_1_16219e3a.htm



  • Hallo,

    danke Dir sehr für die echt erschöpfende Antwort !
    Ich les mir das nachher nochmal GANZ genau durch ... muss erst mal Abendbrot machen 🙂

    Was ich beim "überfliegen" gerade nicht gesehen habe sind die sogenannten prototypen von eigenen funktionen.
    Ich hab das nur mal in anderen Projekten gesehen, gehört und auch was davon im Tutorial gelesen.
    Jedoch kann man ja mit .NET keine funktionen mehr außerhalb von Classen definieren oder hab ich da was falsch verstanden ?
    Dann geht das ja mit den Prototypen gar nicht mehr so oder bin ich jetzt völlig auf dem falschen Dampfer mit den Prototypen ?

    Dank Dir nochmal für die Antwort...habs mir glatt ausgedruckt !

    Matthias



  • Ich sehe keinen Grund warum man in .Net keine freie Mehtoden erstellen können sollte, zumal diese durchaus als Funktoren dienen könnten.

    So lässt sich folgendes verwenden:

    System::Void helper(System::String^ t)
    {
    	t = "Hallo Welt";
    }
    
    System::String ^t  = gcnew System::String("");
    helper(t);
    

    IMHO ging es darum .Net Objekte global anzulegen. Warum ? Ka. Ich nehme an, es würde probleme mit dem Aufräumen der Objekte geben da vermutlich nach C++ Regeln die Objekte zu spät bzw. undefiniert zerstört werden würden.

    Hier kann uns eventuell Jochen helfen.



  • Ich muss zugeben: Ich hab den Thread jetzt nicht ganz verfolgt...
    Was ist genau die Frage? Warum man ref-Obejekte nicht global instanziieren kann?
    Das liegt daran, dass das initialiseren nicht so wie bei der CRT funktioniert (wo es "globale" initializer gibt) sondern jetzt "deterministisch" an der jeweiligen Klasse gebunden ist (was IMHO viel schöner ist, da die Reihenfolge ersichtlich ist; im gegensatz zu C/C++).

    ref class A
    {
    };
    
    A ^a;  // erzeugt  error C3145: 'a' : global or static variable may not have managed type 'A ^'
    
    ref class B
    {
    public:
      static A ^a;  // ist ok, und hat den gleichen effekt wie das obige...
    };
    


  • Jup,

    genau darum ging es, damit da nicht einfach eine "vermutung" stehen bleibt 🤡

    Danke schön!



  • Hallo,

    sorry für die verspätete Antwort, bin grad rein.

    Naja, es ging eigentlich um vieles:

    1. Warum geht nach diesem Code der Designer nicht mehr ?
    (Komplett neue Windows Forms-Anwendung )

    Form1.h:

    #pragma once
    
    ref struct test2
    	{};
    
    namespace test {
    .
    .
    .
    

    Danach geht der Designer nicht mehr ???
    Warum das war die Frage...die vorläufige Antwort von Knuddelbär den code
    ref struct test ... in eine extrah *.h datei zu schreiben und diese zu includen. Das geht auch, beantwortet aber die Frage noch nicht ausschöpfend.
    Komischerweise geht value struct test ... an genau der gleichen stelle. Da geht der Designer wieder ( Form1.h schliessen und neu öffnen sonst gehts nicht ! )

    Dann gings um die Hilfe, ich lande manchmal an merkwürdigen Seiten wenn ich F1 drücke, die gar nichts mit dem Thema zu tun haben.
    Da denke ich aber hilft eine neue installation bei mir.

    Dann gings als letztes um die Prototypen von eigenen functionen. Da hab ich viele Beispiele ( unmanaged wohlgemerkt ! ) bei denen die in den Header Dateien stehen. Das ist ja jetzt wohl irgendwie nicht mehr so. Was ich ein bischen komisch finde ist das Functionene anscheinend nur noch in Classen stehen dürfen ??

    Naja und zu guter letzt ging es noch um die ganzen Dateien die automatisch angelegt werden wenn man ein neues Windows Forms-Anwendung erstellt.
    Da steige ich noch nicht ganz durch.
    Da hat aber Knuddel... schon nen sehr guten Anfang vermitteln können .. Danke nochmals !

    So, das als kleine Zusammenfassung 🙂

    Matthias



  • 1. Warum geht nach diesem Code der Designer nicht mehr ?

    Wie bereits gesagt: Microsoft fragen, das wird Dir hier erst mal keiner erklären können , die Fehlermeldung meldet, das VCCodeModel noch nicht fertig ist. Leb mit ;o)

    Die Prototypenfrage ist beantwortet, gerade mal 2 Posts über Deinem.

    Was die Datieen betrifft weiß ich noch nicht genau was Du willst ?! In der Hilfe gibt es irgendwo eine Liste mit beschreibung welche Datei für was gut ist und irgendwo stehen dann auch die Dinge wie .ncb ist die Intellisense Datenbank.

    Ich persönlich lebe damit, das ich nicht genau weiß was der Compiler alles an FIles anlegt zumal sich das von Version zu Version ändern kann.



  • Hallo,

    zu 1 ja, damit hab ich mich erst mal abgefunden. Jochen hatte nur danach gefragt und so habe ich es nochmal mit reingeschrieben, auch in der Hoffnung das er vielleicht eine andere Erklärung haben könnte da er MS Dev ist.

    Die Prototypenfrage ist beantwortet, gerade mal 2 Posts über Deinem.

    Da bin ich noch am grübeln ... das hab ich noch nicht nachvollziehen können weil ich wieder nicht genau weiss woo ich den Code von Jochen hinschreiben muss ?
    Ich denke aber das der in die Classe muss oder ?
    Habt Ihr ja geschrieben das die ref nur in classen geht. Den Vorteil davon verstehe ich jetzt noch nicht worum ich mir aber auch keine Sorgen weiter mache da das sicher noch kommt wenn ich ein bischen mehr Erfahrung gesammelt habe.

    Das mit den Dateien ... so bin ich eben und jeder Mensch ist eben auch eine Eigene Classe 🙂 ... ich will sehr oft alles bis ins kleinste verstehen ... dazu gehören eben auch diese blöden dateien.

    Ich probier damit gerade rum 🙂

    Matthias



  • Warum der Designer nicht mehr geht? Steht das nicht in der Fehlermeldung?

    The class Form1 can be designed, but is not the first class in the file. Visual Studio requires that designers use the first class in the file. Move the class code so that it is the first class in the file and try loading the designer again.


Anmelden zum Antworten