Zum Inhalt springen

klasse "getötet"?


xcvbm

Empfohlene Beiträge

ich habe in der .h Datei meiner CDoc Klasse gerade verschiedene Änderungen gemacht. Danach wollte ich auf die .cpp Datei zugreifen. Dann kam diese Fehlermeldung

fehler.JPG

Diese Fehlermeldung kommt nun immer für alle Elemente der Klasse. Ich habe dann die Änderungen versuchsweise wieder rückgängig gemacht. Aber leider bringt das jetzt nix mehr.

Die Änderungen sind diese:


// Implementierung
public: //ab hier______________________
UINT GetColor();
static const COLORREF m_crColors[8];
CLine* GetLine(int nIndex);
int GetLineCount();
CLine* AddLine(CPoint ptFrom, CPoint ptTo);
CObArray m_oaLines;
virtual ~CTag11Doc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generierte Message-Map-Funktionen
protected:

#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generierte Message-Map-Funktionen
protected:
afx_msg void OnColorCommand(UINT nID);
afx_msg void OnUpdateColorUI(CCmdUI* pCmdUI);
*/ //bis hier_________________
//{{AFX_MSG(CTag11Doc)
// HINWEIS - An dieser Stelle werden Member-Funktionen vom Klassen Assistenten eingefügt und entfernt.
// Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
UINT m_nColor;
CObArray m_oaLines;
};
[/PHP]

Die Änderungen habe ich nur per Hand eingetragen, nicht mit dem Klassenassistenten oder sowas.

Vielleicht habt ihr eine Idee, der Compiler meldet mir noch freundliche 52 Fehler, die ich mal eben nicht poste.

Ich komm damit leider nicht selber klar.

Vielen Dank im Voraus.

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Christoph F.

Die Änderungen habe ich nur per Hand eingetragen, nicht mit dem Klassenassistenten oder sowas.

Vielleicht habt ihr eine Idee, der Compiler meldet mir noch freundliche 52 Fehler, die ich mal eben nicht poste.

Ich komm damit leider nicht selber klar.

Vielen Dank im Voraus.

Christoph

Was bringt denn der Compiler für Fehlermeldungen ?

Steht in den Meldungen irgendwas darüber welche Funktion nicht implementiert ist ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht ist es besser ihr kuckt euch das mal wirklich live an. Es ist das komplette Projekt, ohne den Debug Ordner, als tag11.zip Datei (habe den Norton Antivirus laufen).

Download !

Aber wenn das nicht so gut ist, schicke ich auch gern die Fehlermeldungen. Ich will hier nicht so dreist faul erscheinen, denke mir nur das es sinnvoller ist.

Sagt bescheid wenn es nicht so ist.

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie hast Du das bloß geschafft?

Line.cpp

CLine::CLine(CPoint ptFrom, CPoint ptTo, COLORREF crColor)

-> diesen Ctor hast Du nicht deklariert.

tag11doc.cpp:

IMPLEMENT_DYNCREATE(CTag11Doc, CDocument)

BEGIN_MESSAGE_MAP(CTag11Doc, CDocument)

-> ist doppelt, die ersten Exemplare müssen weg.

CLine *pLine = new CLine(ptFrom, ptTo, m_crColors[m_nColor]);

-> so einen Ctor hast Du weder deklariert noch implementiert.

const COLORREF CTag10Doc::m_crColors[8] = {

-> Die Klasse heißt jetzt CTag11Doc.

tag11doc.h

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

-> doppelt.

UINT m_nColor;

CObArray m_oaLines;

-> doppelt.

Zeile 76: };

-> muss weg.

//{{AFX_MSG(CTag11Doc)

// HINWEIS - An dieser Stelle werden Member-Funktionen vom Klassen Assistenten eingefügt und entfernt.

// Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

-> doppelt, sollte weg, damit der Klassenassistent funktioniert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Christoph F.

schei0e

Na, nicht fluchen ;)

wie mache ich das? was meinst du mit Ctor?
Ctor ist eine gängige Abkürzung für Konstruktor.

Die Deklaration eben dieses Ctor, den Du da implementierst, sollte in Line.h stehen und in etwa so aussehen:

CLine(CPoint ptFrom, CPoint ptTo, COLORREF crColor);

Wo du gerade da bist, kannst Du den hier löschen, denn den deklarierst Du, implementierst ihn aber nicht:

CLine(CPoint ptFrom, CPoint ptTo);

Link zu diesem Kommentar
Auf anderen Seiten teilen

jetzt habe ich einiges kapiert und gelernt. leider habe anscheinend schon wieder ein paar sachen durcheinander gebracht:

in

CTag11View

habe ich diese Funktion:


void CTag11View::OnMouseMove(UINT nFlags, CPoint point)
{
// Prüfen, ob linke Maustaste gedrückt
if ((nFlags & MK_LBUTTON) == MK_LBUTTON)
{
// Wurde Maus aufgefangen?
if (GetCapture() == this)
{
// Gerätekontext holen
CClientDC dc(this);

// Die Linie ins Dokument aufnehmen
CLine *pLine = GetDocument()->AddLine(m_ptPrevPos, point); //hierhier

// Aktuellen Linienzug zeichnen
pLine->Draw(&dc);

// Aktuellen Punkt als vorherigen speichern
m_ptPrevPos = point;
}
}
CView::OnMouseMove(nFlags, point);
}


[/PHP]

bei "//hierhier"

gibt es einen Pointer der auf CLine und dann auf Addline verweist. Das dumme ist, das Addline nicht in CLine steht sondern inCTag11Doc. Ausserdem erwartet Addline 3 Argumente, der aufruf übergibt aber nur 2.

Habe ich das wieder falsch zusammengefummelt oder lese ich das falsch?

Habe noch mal die momentane Version hier.

Download No2 !

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

achja, wenn man sich den kram runterlädt findet man in den Dateien die Kommentare //hier - welche für weniger wilde Änderungen stehen und //hierhier die für die wilden Änderungen sind. Ist so ne persönliche "Suchmarke", wenn was nicht funkts - gleich nach //hierhier suchen und man findet die fiesen stellen. :)

naja soviel dazu

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Christoph F.

bei "//hierhier"

gibt es einen Pointer der auf CLine und dann auf Addline verweist. Das dumme ist, das Addline nicht in CLine steht sondern inCTag11Doc. Ausserdem erwartet Addline 3 Argumente, der aufruf übergibt aber nur 2.

Habe ich das wieder falsch zusammengefummelt oder lese ich das falsch?

Du liest zum Teil falsch. Der CLine-Zeiger nimmt hier nur den Rückgabewert von AddLine entgegen, hat aber mit dem Aufruf sonst nichts zu tun. Aufgerufen wird AddLine über den Rückgabewert von GetDocument, der einen Zeiger auf die aktuelle CTag11Doc-Instanz enthält. Das ist also schon mal in Ordnung.

Mit den Argumenten hast Du allerdings recht. AddLine ist deklariert und implementiert als:

CLine* AddLine(CPoint ptFrom, CPoint ptTo, COLORREF crColor)

Link zu diesem Kommentar
Auf anderen Seiten teilen

so. jetzt habe ich wohl alle Fehler weggehauen.

Alle Fehler ? Nein... leider nicht. was ist dieser?

--------------------Konfiguration: tag11 - Win32 Debug--------------------

Linker-Vorgang läuft...

Line.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual struct CRuntimeClass * __thiscall CLine::GetRuntimeClass(void)const " (?GetRuntimeClass@CLine@@UBEPAUCRuntimeClass@@XZ)

Debug/tag11.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise

Fehler beim Ausführen von link.exe.

tag11.exe - 2 Fehler, 0 Warnung(en)

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja, habe ich wohl

(ich bin manchmal durcheinander, und das ist blöd.)

leider kommt dann die Fehlermeldung, mit der ich auch nix anzufangen weiß

--------------------Konfiguration: tag11 - Win32 Debug--------------------

Kompilierung läuft...

Line.cpp

C:\Programme\Microsoft Visual Studio\MyProjects\tag11\Line.cpp(16) : error C2512: 'CLine' : Kein geeigneter Standardkonstruktor verfuegbar

Fehler beim Ausführen von cl.exe.

tag11.exe - 1 Fehler, 0 Warnung(en)

ich habe das gefühl gleich haben wird es.(?)

mann, ich hoffe ich nerve nich allzusehr?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Christoph F.

C:\Programme\Microsoft Visual Studio\MyProjects\tag11\Line.cpp(16) : error C2512: 'CLine' : Kein geeigneter Standardkonstruktor verfuegbar

Wenn Du irgendeinen Konstruktor für eine Klasse angibst, dann stellt der Compiler nicht mehr automatisch einen Default-Konstruktor für die Klasse zur Verfügung.

Du brauchst einen Konstruktor für CLine, der keine Parameter (oder Defaults für alle Parameter) hat.

In der letzten Version war CLine::CLine() noch drin. Hast Du den entfernt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja habe ich entfernt.

ich dachte da nichts drinsteht

CLine::Cline()

{

}

wird es wohl ein Fehler von mir sein,

weil es ja das andere CLine ja auch gibt.

CLine::CLine(CPoint ptFrom, CPoint ptTo, COLORREF crColor)

{

// Anfangs- und Endpunkte initialisieren

m_ptFrom = ptFrom;

m_ptTo = ptTo;

m_crColor = crColor;

}

Ich habe das mal eben über MemberFunktion hinzufügen wieder reingemacht. Ich glaube das war vorher auch schon irgendwie kaputt (bevor ich es gelöscht habe)

UND ICH DREH DURCH!!!!

Es läuft.

Ich glaube das ich dir zu echtem Dank verpflichtet bin!

Du hast mir sehr viel Geholfen, vielen Dank für diese Geduld mit mir

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...