Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

sehe ich das richtig das du in der Klasse CLine versuchst eine CLine Membervariable zu erzeugen? Das geht natürlich nicht.

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

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

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

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

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

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

ist nich der GANZE. nur von der Klasse CTag10doc.

reicht das nicht, ich kann ja noch mehr posten....?

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]

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.

na sowas.... das sollte ich vermeiden. DANKE für die Hilfe, es läuft. Hier ein Screeny von dem kleinen Zeichenprogramm

happy2.jpg

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.