xcvbm Geschrieben 7. November 2002 Geschrieben 7. November 2002 Guten Abend, wie ihr vielleicht wisst habe ich mich in den letzten Wochen etwas zurückgezogen um C++ zu lernen. Ich habe mir das C++ in 21 Tagen Buch besorgt und bin momentan beim Tag 10. Ich habe ein SDI Dokument erstellt und nach den Angaben in dem Buch bearbeitet. in der Klasse CLine habe ich folgendes: // Implementierung public: //hier bin ich CLine* GetLine(int nIndex); int GetLineCount(); CLine* AddLine(CPoint ptFrom, CPoint ptTo); CObArray m_oaLines; virtual ~CTag10Doc(); //und schüss leider kommt bei der Ausführung immer dieser Fehler: error C2143: Syntaxfehler : Fehlendes ';' vor '*' error C2501: 'CLine' : Fehlende Speicherklasse oder Typbezeichner error C2501: 'GetLine' : Fehlende Speicherklasse oder Typbezeichner komm ich irgendwie auch nicht weiter... kann es sein das ich die Implementierung an der Falschen stelle gemacht, oder sowas? Danke Christoph Zitieren
Naberius Geschrieben 7. November 2002 Geschrieben 7. November 2002 sehe ich das richtig das du in der Klasse CLine versuchst eine CLine Membervariable zu erzeugen? Das geht natürlich nicht. Zitieren
nic_power Geschrieben 7. November 2002 Geschrieben 7. November 2002 Originally posted by Naberius sehe ich das richtig das du in der Klasse CLine versuchst eine CLine Membervariable zu erzeugen? Das geht natürlich nicht. Wieso geht das nicht? Ich vermute, dass das abschliessende Semikolon nach der Klassendefinition fehlt: class CLine { public: <...usw...> }; <--- ist dieses Semikolon gesetzt???? Nic Zitieren
fmarx2000 Geschrieben 7. November 2002 Geschrieben 7. November 2002 Originally posted by Naberius sehe ich das richtig das du in der Klasse CLine versuchst eine CLine Membervariable zu erzeugen? Das geht natürlich nicht. Man kann das schon machen. Sonst würden ja verkette Listen mit Zeigen nicht funktionieren. Des weiteren sehe ich leider keine Deklaration einer Variable vom Typ CLine. Frank Zitieren
nic_power Geschrieben 7. November 2002 Geschrieben 7. November 2002 Originally posted by fmarx2000 Des weiteren sehe ich leider keine Deklaration einer Variable vom Typ CLine. Ich hatte das so verstanden, dass die Klasse "CLine" heisst. Verkettete Listen wuerden auch ohne das Feature funktionieren. Nic Zitieren
fmarx2000 Geschrieben 7. November 2002 Geschrieben 7. November 2002 Originally posted by nic_power Ich hatte das so verstanden, dass die Klasse "CLine" heisst. Verkettete Listen wuerden auch ohne das Feature funktionieren. Nic Ja, ich könnte einen Schweine - Void - Zeiger haben das dann das ganz wirklich ekelhaft macht. Frank Zitieren
nic_power Geschrieben 7. November 2002 Geschrieben 7. November 2002 Originally posted by fmarx2000 Ja, ich könnte einen Schweine - Void - Zeiger haben das dann das ganz wirklich ekelhaft macht. Nö, das hat nichts mit einem void* zu tun: struct list{ int element; struct list* next; struct list *prev; }; Die Frage die angesprochen wurde betraf das Verwenden eines Klassenmembers, der den gleichen Namen traegt wie die Klasse selbst (in C ist das vergleichbar mit dem Verwenden eines Variablennamens, der den selben Namen traegt wie die Funktion in der er verwendet wird). class CLine { public: int CLine; }; bzw: int listElem() { int listElem; } Das Scoping in C/C++ klaert diese Frage eindeutig. Beide Faelle sind zulaessig. Gerade bei C++ wird von diesen Features heftigst Gebrauch gemacht, da der Konstruktur den gleichen Namen traegt wie die Klasse selbst und Memberfunctions mit identischen Namen und unterschiedlichen Argumenten verwendet werden. Nic Zitieren
xcvbm Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 zur sicherheit noch mal der ganze Quelltext.... class CTag10Doc : public CDocument { protected: // Nur aus Serialisierung erzeugen CTag10Doc(); DECLARE_DYNCREATE(CTag10Doc) // Attribute public: // Operationen public: // Überladungen // Vom Klassenassistenten generierte Überladungen virtueller Funktionen //{{AFX_VIRTUAL(CTag10Doc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); //}}AFX_VIRTUAL // Implementierung public: //hier bin ich CLine* GetLine(int nIndex); int GetLineCount(); CLine* AddLine(CPoint ptFrom, CPoint ptTo); CObArray m_oaLines; virtual ~CTag10Doc(); //und schüss #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generierte Message-Map-Funktionen protected: //{{AFX_MSG(CTag10Doc) // 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() }; [/PHP] konnte leider mit den bisherigen Postings nicht viel anfangen, vielleicht hilft das hier weiter zu helfen Christoph Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Hi, wenn das der Ganze Quelltext ist, wo ist den dann CLine deklariert? Zitieren
xcvbm Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 ist nich der GANZE. nur von der Klasse CTag10doc. reicht das nicht, ich kann ja noch mehr posten....? Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Am besten noch die Klasse CLine ***edit*** Also das geht einwandfrei: class test1 { public: test1(); }; class test2 { public: test2(); test1* edg(); }; [/PHP] Zitieren
xcvbm Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 hier CLine // Line.h: Schnittstelle für die Klasse CLine. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_LINE_H__A70DA8C9_2D09_4DA5_B438_987A59F159DD__INCLUDED_) #define AFX_LINE_H__A70DA8C9_2D09_4DA5_B438_987A59F159DD__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CLine : public CObject { public: CLine(CPoint ptFrom, CPoint ptTo); CLine(); virtual ~CLine(); private: CPoint m_ptTo; CPoint m_ptFrom; }; #endif // !defined(AFX_LINE_H__A70DA8C9_2D09_4DA5_B438_987A59F159DD__INCLUDED_) [/PHP] Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Da er dir sagt "error C2501: 'CLine' : Fehlende Speicherklasse oder Typbezeichner", hast du auch die Line.h in die Datei mit der anderen Klasse included? Zitieren
xcvbm Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 aahhjjjaa. Das hat auf jeden Fall was gebracht. Jetzt kommen nur noch 2 Fehler, vielleicht fallt dir auch dazu noch was ein? ///////////////////////////////////////////////////////////////////////////// // CTag10View Zeichnen void CTag10View::OnDraw(CDC* pDC) { CTag10Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen // Anzahl der Linien im Dokument ermitteln int liCount = pDoc->GetLineCount(); // Gibt es Linien im Dokument? if (liCount) { int liPos; CLine *lptLine; // Schleife durch die Linien des Dokuments for (liPos = 0; liPos < liCount; liPos++) { // Anfangs- und Endpunkte für alle Zeilen holen lptLine = pDoc->GetLine(liPos); // Linie zeichnen lptLine->Draw(pDC); //hier zeigt der Fehler Pfeil hin } } } [/PHP] FEHLERMELDUNG: error C2039: 'Draw' : Ist kein Element von 'CLine' Siehe Deklaration von 'CLine' error C2039: 'Draw' : Ist kein Element von 'CLine' Siehe Deklaration von 'CLine' Muss ich in der CTag10View die KLasse CLine Implementiere? Ist bis jetzt nicht so. Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Dur rufst mit lptLine->Draw die Funktion Draw in der Klasse CLine auf, aber in der Klasse CLine hast du die Funktion nirgendwo deklarriert. Zitieren
xcvbm Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 na sowas.... das sollte ich vermeiden. DANKE für die Hilfe, es läuft. Hier ein Screeny von dem kleinen Zeichenprogramm Zitieren
Empfohlene Beiträge
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.