Brett vor'm Kopf? Betr. Zeiger ->



  • Hallo... 🙂

    Mit Folgende Funktion soll die 'View' gezoomt werden.
    Funktion befindet sich in CMainFrame.

    void CMainFrame::OnSelChangeZoom()
    {
    // Neue Auswahl des Kombinationsfelds ermitteln
    // Abgewanddeltes Listing aus Visual C++ 6 in 21 Tagen
    // Tag12
    
    CModelldesignerView* pMDView;
    
    int nIndex = m_zoomauswahl.GetCurSel();
    if(nIndex == CB_ERR)
        return;
    
    CString ausgabe;
    m_zoomauswahl.GetLBText(nIndex, ausgabe);
    AfxMessageBox(ausgabe); //Kontrollausgabe
    
    if(ausgabe == "150%")
        m_zoomweite = 1500;
    if(ausgabe == "100%")
        m_zoomweite = 1000;
    if(ausgabe == "50%")
        m_zoomweite = 500;
    
    pMDView->m_zoomfkt = m_zoomweite;
    }
    

    Kompilierung läuft, bis auf folgende Warnung: 😮
    *
    C:\programmieren test\Modelldesigner\MainFrm.cpp(243) : warning C4700: Lokale Variable 'pMDView' wurde ohne Initialisierung verwendet*

    Im Programmablauf kommt es zum Absturz mit der Fehlermeldung: 😮
    *
    Die Anweisung in "xyz" verweist auf Speicher in "abc"...
    *
    Also wahrscheinlich ein Zeiger ins Nirvana...

    Folgende Abwandlung hatte ich auch ausprobiert: 😞

    Funktion in die View-Klasse geschrieben und dann wollt ich zur Auswertung mit einem Zeiger halt m_zoomauswahl aus CMainFrame abholen.
    Natürlich kam es zum selben Problem.

    Irgendwie kom ich mir etwas töffelich vor. 😕

    RanCarter 🕶

    P.S. Die 'View' soll danach natürlich auch noch neu gezeichnet werden.



  • pMDView zeigt allerdings ins Nirvana ... du hast den Zeiger ja nirgends initialisiert.



  • Original erstellt von dEUs:
    pMDView zeigt allerdings ins Nirvana ... du hast den Zeiger ja nirgends initialisiert.

    Dann steh ich wohl vor einem Anfängerproblem. :p

    Ein kleines Beispiel wäre da jetzt nicht schlecht.
    In anderen Postings hab ich folgendes gesehen:

    CKlasseDlg *pZeiger = new CKlasseDlg;
    

    Hier hab ich dann folgendes gemacht:

    CModelldesignerView* pMDView = new CModelldesignerView;
    

    Dann mauelt er aber, weil das dann alles Protected is. 😡



  • ne, das is sinnlos. du brauchst ja nen eiger auf die aktuelle Instanz deines Views! Nicht nen Neuen!



  • Original erstellt von dEUs:
    ne, das is sinnlos. du brauchst ja nen eiger auf die aktuelle Instanz deines Views! Nicht nen Neuen!

    UPS!!! 🙄

    Also... mal für einen kleinen Hirni

    Wie muß ich dat denn nu machen? :p



  • Ich hba sowas in der Form selbst noch nicht gemacht, aber ich denke ungefähr so:

    CModelldesignerView* pMDView = this->GetActiveView();



  • Original erstellt von TheBigW:
    **Ich hba sowas in der Form selbst noch nicht gemacht, aber ich denke ungefähr so:

    CModelldesignerView* pMDView = this->GetActiveView();**

    Dann kommt folgende Fehlermeldung:
    *C:\programmieren test\Modelldesigner\MainFrm.cpp(227) : error C2440: 'initializing' : 'class CView *' kann nicht in 'class CModelldesignerView ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat



  • Dann musst du halt noch casten:

    CModelldesignerView* pMDView = (CModelldesignerView*)this->GetActiveView();
    


  • Original erstellt von thomas80d:
    **Dann musst du halt noch casten:

    CModelldesignerView* pMDView = (CModelldesignerView*)this->GetActiveView();
    ```**
    

    Merci !!!
    Ham wa doch mal wieder was gelernt !!! 🙂

    Jetzt muß ich nur noch die 'View' neu Zeichnen lassen.
    Woll'n mal hoffen, das ich das hinbekomme. 🙄



  • Original erstellt von rancarter:
    **Dann kommt folgende Fehlermeldung:
    C:\programmieren test\Modelldesigner\MainFrm.cpp(227) : error C2440: 'initializing' : 'class CView ' kann nicht in 'class CModelldesignerView ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    Du hättest auch nur die Fehlermeldung lesen, verstehen und die dort angegebene Lösung umsetzen müssen.

    Vielleicht könntest du das das nächste mal auch tun. 😉



  • 🙄



  • Mach Dir nichts draus, typisch C++ler. 😉



  • Original erstellt von Erhard Henkes:
    Mach Dir nichts draus, typisch C++ler. 😉

    Uff... :o auf die 12 !

    Aber mal im ernst. Ich glaub in Sachen Zeiger könnt ich mal etwas Nachhilfe gebrauchen. Besonders in Bezug auf Member-Variablen und deren Werteaustausch in MFC-Programmen.
    Nach dem Motto Grenz ähh.. Klassenübergreifendes lesen und schreiben.
    Bis jetzt besitze ich nur gefährliches Halbwissen !!! 🙄

    Ne nette Quellenangabe wär nicht schlecht. Buch oder besser Internet.
    Über Google hab ich es schon versucht aber nicht so das richtige gefunden.

    Auf jedenfall wünsch ich allen ein schönes Wochenende. 😃

    RanCarter 🕶


Anmelden zum Antworten