Schwierigkeiten mit der Funktion GetDocument



  • Hallo,

    ich bin noch c++ Anfänger und habe ein paar größere Schwierigkeiten mein Programm zum laufen zu bringen.(Kommt aus einem Visual c++ einführungskurs)

    Es soll eine MFC SDI Anwendung erstellet werden.
    Hierin sollte man ein Klasse CLine erstellen, welche von der Klasse CObject abgeleitet wird. (Die Klasse soll nachher in auf einer Zeichenoberfläche Linien zeichenen) Nun werden einige Funktionen deklariert, die ausgeführt werden sollen, wenn es Nachrichten von Mousereignissen gibt. die Funktion bei der sich mein Compiler stört sieht so aus:

    43: void CTag10View::OnMouseMove(UINT nFlags, CPoint point)
    44: {
    45: // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen Âund/oder Standard aufrufen
    46:
    47: ///////////////////////
    48: // EIGENER CODE, ANFANG
    49: ///////////////////////
    50:
    51: // Prüfen, ob linke Maustaste gedrückt
    52: if ((nFlags & MK_LBUTTON) == MK_LBUTTON)
    53: {
    54: // Wurde Maus aufgefangen?
    55: if (GetCapture() == this)
    56: {
    57: // Gerätekontext holen
    58: CClientDC dc(this);
    59:
    60: // Die Linie ins Dokument aufnehmen
    61: CLine *pLine = GetDocument()->AddLine(m_ptPrevPos, point);
    62:
    63: // Aktuellen Linienzug zeichnen
    64: pLine->Draw(&dc);
    65:
    66: // Aktuellen Punkt als vorherigen speichern
    67: m_ptPrevPos = point;
    68: }
    69: }
    70:
    71: ///////////////////////
    72: // EIGENER CODE, ENDE
    73: ///////////////////////
    74:
    75: CView::OnMouseMove(nFlags, point);
    76: }

    Der compiler hängt sich auf, da er die Funktion GetDocument nicht zu kennen scheint. Die ist aber meines Wissens doch in der Klasse CObject implementiert, oder?
    Die Fehlermeldung sieht so aus:
    Tag10.cpp(223) : error C2065: 'GetDocument' : nichtdeklarierter Bezeichner

    Kann mir da jemand helfen?



  • Hallo,

    C++ in 21 Tagen lässt grüssen 😉

    Hast du in deinem Document (CTag10Doc) die Methode AddLine(..) implementiert?

    MfG



  • Wenn du das in der tag10doc.cpp

    CLine* CTag10Doc::AddLine(CPoint ptFrom, CPoint ptTo)
    {
    // Ein neues CLine-Objekt erzeugen
    CLine pLine = new CLine(ptFrom, ptTo);
    try
    {
    // Die neue Linie in das Objektarray einfügen
    m_oaLines.Add(pLine);
    // Dokument als bearbeitet markieren
    SetModifiedFlag();
    }
    // Ist Speicherausnahme aufgetreten?
    catch (CMemoryException
    perr)
    {
    // Meldung für Benutzer, schlechte Neuigkeiten
    // mitteilen.
    AfxMessageBox("Speichermangel", MB_ICONSTOP | MB_OK);
    // Wurde Linienobjekt erzeugt?
    if (pLine)
    {
    // Objekt löschen
    delete pLine;
    pLine = NULL;
    }
    // Ausnahmeobjekt löschen
    perr->Delete();
    }
    return pLine;

    }

    Und den Teil in tag10doc.h

    public:
    CLine* GetLine(int nIndex);
    int GetLineCount();
    CLine* AddLine(CPoint ptFrom, CPoint ptTo);
    CObArray m_oaLines;

    meinst, dann hab ich die Funktion erstellt.

    Hat das bei dir auch Probleme gegeben?
    Ich weiss wirklich nicht warum das nicht funktioniert. Hab hier schon bei BMW einen Programmierer gefragt, aber der war auch ratlos (stellt sich die Frage wie gut der Programmierer war)

    Danke für deine Antwort



  • Hallo,

    ich hab dieses Tutorial schon 2x durchprobiert. Es hat soweit keine Probleme gegeben. Bei manchen Sachen musst du allerdings auch das darauffolgende abtippen, bis alles richtig implementiert ist.

    Tag10 ist für den MFC Einstieg sehr gut geeignet. Probier einfach mal ein bißchen rum, es klappt schon 😉

    MfG



  • Was meinst du denn mit dem "das darauffolgende abtippen"?

    Ich komm echt nicht weiter, hab den Tag jetzt schon 4 mal neu angefangen.

    Wie hast du denn das nichtvorhandensein der deklaration der Variable m_ptPrevPos hingekriegt. Die wird nirgends in den angegebenen listings des Buchs deklariert und erzwingt deshalb eigentlich auch immer eine Fehlermeldung



  • Na ja, du beginnst bei CLine und arbeitest dich durch. Wenn du das Programm an manchen Stellen aufrufst wird es nicht laufen. Du gehst einfach das nächste Kapitel durch. Es ist ziemlich komplex, aber es wird schon laufen..



  • Hat dir das Programm keine Fehlermeldung wegen der fehlenden
    Variabelndeklaration die ic oben beschrieben habe gegeben?



  • Danke, habe alle Schwierigkeiten beseitigen können und das Programm läuft jetzt


Anmelden zum Antworten