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 BezeichnerKann 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