ExpeditionTool::Form2::Show(); error C2352



  • Hallo,
    Ich hab gerade erst angefangen mit MS Visual Studio 2005 zu programmieren, ich komme von der Borland 6,0 IDE und ich muß feststellen das ich es nicht mal schaffe mit hilfe der Codes die mir die IDE vorgiebt die Form2 aufzurufen.

    Es kommt immer der Fehler:

    error C2352: 'System::Windows::Forms::Control::Show': Unzulässiger Aufruf einer nicht statischen Memberfunktion
    

    Das ist die Stelle an der ich die Form aufrufe.

    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
    				 ExpeditionTool::Form2::Show();
    			 }
    

    kann mir jemand Sagen was ich falsch mache?
    Und warum Programmiert man bei MS alles in die header?
    Bei Borland war das in der .cpp.

    Danke schonmal



  • ähm man programmiert nicht alles in der header beim MFC
    du kannst es machen jedoch gibt es auch hier eine *.cpp

    meineclasse.h

    viod MeineFunction(BOOL bTorF);

    meineclasse.cpp

    void CMeineClasse::MeineFunction(BOOL bTorF)
    {
    if(bTorF)
    MessageBox("TRUE");
    }

    LowFly



  • Ich hab einen Timer und nach ablauf der Zeit soll Form2 Angezeigt werden, wenn ich jetzt beim Ereigniss Tick doppelklicke bringt er mich zu dieser Funktion.
    wenn ich aber den code dort reinschreibe bringt er mir diesen Fehler.
    Wenn ich die Funktion in die cpp schreiben muß dann weiß ich nicht wie.
    Ich bin scheinbar zu doof für diese IDE.

    Sorry kann mir das jemand erklären?



  • Das ist übrigens nix mit MFC sondern CLI.



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • kann mir da jetzt echt keiner helfen???



  • Ein gutes Grundlagenbuch und das Kaptiel Klassen und Instanzen könnte weiterhelfen.

    Um für Form2 Show aufurfen zu können, benötigst Du eine Instanz der Klasse.



  • Es steht ja schon im Fehler:

    statisch...

    Also versuch's mal anstelle von ...Form2::Show() mit ...Form2->Show()

    Denn über :: kommst Du ja an die statischen Member der Klasse, aber Form2 ist ja schon ein Objekt der Klasse, also verwende ->

    Das dürfte doch unter Borland genauso sein (ist doch C++ spezifisch, denke ich).



  • Also wird das nicht von der IDE übernommen? sowie bei Borland.



  • Die Lücken in den Grundlagen sind bei Borland genau die gleichen wie beim VS Compiler



  • Warum hab ich z.B. bei MS eine int main und bei Borland nicht?
    Warum steht bei MS der Quelltext in der header der eigentlich in die cpp gehört?
    das hat doch nix mehr mit grunlagen zu tun wenn die Kommlett anders arbeiten.



  • Du bist hier in C++/CLI nicht C++.



  • OK versuchen wir es mal so.
    Componenten:
    Form1, Button1.

    Funktion:
    Buttonklick = Beendet das Programm.

    Kann mir jetzt einer der MS Visual Studio 2005 benutzt die header und die cpp Datei zeigen, dann erklär ich mir selbst was ich falsch mache und kann auf sinnlose kommentare verzichten.

    Es würde mir auch schon reichen wenn ihr vielleicht irgend ein tut kennt, hab leider keins gefunden.

    Edit: Kein tut über c++ sondern eins über die IDE

    Danke



  • Die von Dir gestellten Probleme haben nichts mit der IDE zu tun sondern mit mangelnden Grundkenntnissen.

    <Namespace>::Form2::Show(); hat nichts mit der IDE zu tun sondern einfach nur mit dem fehlenden Verstndäniss für Instanzen.

    Ich persönlich habe mehr das Gefühl, das es für C++ sehr wenig Tutorials oder Bücher gibt, die exakt auf die IDE eingehen, entgegen VB z.B. wo jeder Schritt über die IDE erklärt ist.

    Das Buch hier könnte das sein was Du suchst:
    Pro Managed C++ and .NET 2.0 Development | ISBN: 159059469X

    Jedoch wirst Du für dieses Buch Grundlagen benötigen. Ein paar Dinge stehen falsch drinn, was imho einfach Flüchtigkeitsfehler sind. Diese dinge fallen mit den Grundlagen auch deutlich auf.

    Ebenso wird jedes Tutorial Grundlagenwissen benötigen - Templates werden da z.B. mit 2 Seiten abgehandelt, das Thema braucht aber viel viel mehr Platz.

    (Das Buch ist IMHO sehr schön wenn man von C++ auf C++/CLI umsteigt).

    Wenn Dir die wertvollsten Tipps: "Lern Grundlagen" zu blöd sind, wirst Du immer wieder hier anecken.

    In C++ wird es immer Sachen geben die man Fragt die für andere total einfach sind und die man selbst nur schwer versteht weil einem die Übersicht fehlt oder die Suchbegriffe. Ein <Namespace>::Form2::Show(); jedoch der IDE zu zuschieben schreit mehr nach ein paar Grundlagen lesen.

    Dein Header und Cpp Problem bekommst Du gelöst, wenn Du in den Grundlagen mach nach Deklaration und Definition suchst.

    Eventuell hilft es aber auch mal die Art und weise wie Du hier um hilfe bittest zu ändern, so erhälst Du weiterhin Querverweise auf die Grundlagen.



  • Ja, ich lerne jetzt Grundlagen da ich scheinbar wirklich nix weiß.
    Danke für den Buchtipp.



  • Hier noch eine Hand voll Links , die dabei helfen:

    http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html
    Hier immer mal die Beiträge anderer lesen, ich lerne hier auch noch dazu oder merke, das ich oft Fragen nicht beantworten kann weil ich gewisse Themen lange nicht gemacht habe

    http://www.c-plusplus.net/forum/viewforum-var-f-is-25.html
    Die FAQ Sammlung des C++ Forums, hier finden sich auch ein paar gute Informationen.

    Und noch kurz zur .h und .cpp im VS:

    Ich tippe darauf, das es für MS einfacher war, den Designer nur auf dem Header rumtanzen zu lassen als das in .h und .cpp aufzuteilen. Mich nervt es auch, man trennt das dann mit der Hand auf.

    So wird beim Klickevent im Header das hier angelegt:

    DebitorDetail.h:

    System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    	}
    

    Daraus kann man dann mit der Hand machen:

    DebitorDetail.h:

    System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e);
    

    DebitorDetail.cpp

    /************************************************************************/
    	/*                                                                     
    	/************************************************************************/
    	System::Void DebitorDetail::toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    		hsp_WindowManager::Instance().debitor_detail.display_filter("");
    	}
    

    Du wirst dies beim Thema Deklaration und Definition wiederfinden 🤡



  • Das war jetzt genau das was mir den richtigen schups gegeben hat.

    Edit: Ich hab dummerweise angenommen das ich das event das die IDE erzeugt,
    so wie es ist in der header stehen lassen muß. Dumm Dumm Dumm

    Danke



  • Es hat sogar nachteile wenn Du das stehen lässt,
    denn alles was sich im Header ändert muss überall
    da aktualisiert werden, wo der Header verwendet wird.

    Wenn die Projekte größer werden, wird das richtig zum
    Ärgernis, weil einfach unnötig viel compiliert wird.

    Ebenso *musst* Du die Definition und Deklaration trennen
    wenn z.B. Form1 Form2 braucht UND umgekehrt.

    Es ist zwar mühsig das mit der Hand zu trennen, aber wenn
    Du Dir das angewöhnst belohnst Du Dich dadurch, das Du
    einfach ein paar Fehler nicht haben wirst und ein paar
    Fehler die dadurch kommen werden einfach das Verständnis
    fördern 🤡

    Wir alle warten auf eine Verbesserung des Formdesigners
    (wart bet hoff), aber solange muss man halt mit leben



  • Hättest du vielleicht noch die ISBN Nr. von dem Buch?



  • Also gerade hier auf der Seite (oben der Link Bücher) gibt es einige Bücher über C++, dann wäre da noch http://www.galileocomputing.de/katalog/openbook/ zu erwähnen. Die haben einige Bücher über .net mit c# (ja, ist nicht C++, aber es gibt soviel Beispiele, etc. im Netz in c# und kann man c und C++, dann kann man die auch verstehen - ist nicht unwichtig).

    Ansonsten ist die MSDN (online und auch die lokale Hilfe) wirkich sehr ausführlich. Die Unterschiede werden durchaus ausführlich beschrieben, auch wenn das anfänglich alles spanische Dörfer sind (die managed classes eben).

    Ich persönlich finde schon, dass man C++ und .net gleichzeitig lernen kann, wenn man zumindest im Kopf beides trennt und eben auch weiss, was woher kommt.

    Aber... der Weg ist weiter... nur einfach nicht entmutigen lassen 😉 Am Ende hat man viel davon und Wissen über c# bekommt man auch noch irgendwie gratis dazu 😉


Log in to reply