Fehler beim Kompilieren
-
Hallo, Leute. Da bin ich wieder und weil ich Anfänger in
C++ bin, brauche ich wieder Ihre Hilfe.Ich gehe jetzt
einen Tutorial für Visual C++.6 durch, ich habe aber
Visual Studio.Net 2003. Und hier gibt es einige
Unterschiede. Es geht um ein Grafik-Programm.
Ein SDI-Anwendung. Es soll etwas gezeichnet werden.
Und dann gespeichert.Und dann wieder gezeigt.
Also, ich habe eine neue Klasse CLine erstellt.
In Tag10_1Doc.h habe ich einen Funktion
AddLine(CPoint ptFrom, CPoint ptTo) eingefügt
mit Funktionstyp CLine* und mit gleichem
Funktionstyp noch eine Funktion GetLine(int nIndex).
Beim kompilieren ich bekomme immer Fehler:Tag10_1Doc.h(40): error C2143: syntax error : missing ';' before '*' Tag10_1Doc.h(42): error C2143: syntax error : missing ';' before '*' Tag10_1Doc.h(40): error C2501: 'CTag10_1Doc::AddLine' : missing storage-class or type specifiers Tag10_1Doc.h(40): error C2501: 'CTag10_1Doc::CLine' : missing storage-class or type specifiers Tag10_1Doc.h(42): error C2501: 'CTag10_1Doc::CLine' : missing storage-class or type specifiers Tag10_1Doc.h(42): error C2501: 'CTag10_1Doc::GetLine' : missing storage-class or type specifiers Tag10_1Doc.h(40): warning C4183: 'AddLine': missing return type; assumed to be a member function returning 'int' Tag10_1Doc.h(42): warning C4183: 'GetLine': missing return type; assumed to be a member function returning 'int'Da sind diese zwei Funktionen. Die sind im Tag10_1Doc.h als public deklariert.
CLine * AddLine(CPoint ptFrom, CPoint ptTo) //(Zeile 40) { //Ein neues CLine-Object erzeugen CLine *pLine = new CLine(ptFrom, ptTo); try { //Die neue Linie in das Object-Array einfügen m_oaLines.Add(pLine); //Dokument als bearbeitet markieren SetModifiedFlag(); } //Ist speicherausnahme aufgetretten? catch(CMemoryException* perr) { //Meldung für Benutzer, schlechte //Neuigkeiten mitteilen AfxMessageBox("Speichermangel", MB_ICONSTOP | MB_OK); //Wurde Linienobject erzeugt? if(pLine) { //Object löschen delete pLine; pLine = NULL; } //Ausnahmeobject löschen perr->Delete(); } return pLine; } CLine * GetLine(int nIndex) //(Zeile 42) { //Zeiger auf Linienobject für die angegeben //Position in Objectarray zurückgeben return (CLine*)m_oaLines[nIndex]; //m_osLines ist eine Variable von Typ CObArray }"Line.h" habe ich überall includet.
Kann mir jemand weiter helfen? Ich wäre dankbar für jeder Hilfe.
-
Hallo,
poste mal die richtige Zeilen der Header-Datei (oder die richtige Header-Datei), denn die Zeilennummern und die Fehler passen nicht zu dem von dir angegebenen Code-Teil...
MfG
-
Benutze mal den menschlichen Zeichenweisen Debugger und kontrolliere, ob Du auch an alle entscheidenenden Stellen ein Semikolon gesetzt hast, wie sieht es mit Klammerpaaren aus...Zuweisungen statt Vergleiche, die ganzen Flüchtigkeitsfehler eben.
Ausserdem ein guter Tipp. Direkt mit Windows/ MFC Programmiereung anzufangen ist IMHO keine gute Idee. Besorg Dir ein Buch wie "C++ in 21 Tagen" (nimm das mit den Tagen nicht so ernst und schau mal die Buch und Tutorialkritiken hier auf der Seite an- da gibt es ne Menge Bücher. Geh mal in einen Buchladen und lies ein bisschen darin rum, dann sieht man oft, womit man klar kommt und womit nicht) und schreibe Konsolenanwendungen. Kann man ruhig mit VS.NET 2003 machen und lern erstmal die elementaren Grundlagen. Meistens schreibt man dann am Anfang keine besonders interessanten Programme, dafür lernt man sehr wichtige Sachen. Wenn Du damit durch bist wird Dir MFC, .NET oder was auch immer viel leichter fallen.
-
Also, hier ist 'Line.h':
#pragma once #include "atltypes.h" // CLine command target class CLine : public CObject { public: CLine(CPoint ptFrom, CPoint ptTo); virtual ~CLine(); private: CPoint m_ptFrom; CPoint m_ptTo; public: void Draw(CDC* pDC); };Line.cpp
#include "stdafx.h" #include "Tag10_1.h" #include "MainFrm.h" #include "Line.h" #include ".\line.h" // CLine CLine::CLine(CPoint ptFrom, CPoint ptTo) { //Anfang und Endpunkte initialisieren m_ptFrom = ptFrom; m_ptTo = ptTo; } CLine::~CLine() { } // CLine member functions void CLine::Draw(CDC* pDC) { //Linie zeichnen pDC->MoveTo(m_ptFrom); pDC->LineTo(m_ptTo); }Tag10_1Doc.cpp
// #include "stdafx.h" #include "Tag10_1.h" #include "MainFrm.h" #include "Line.h" #include "Tag10_1Doc.h" #include ".\tag10_1doc.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CTag10_1Doc IMPLEMENT_DYNCREATE(CTag10_1Doc, CDocument) BEGIN_MESSAGE_MAP(CTag10_1Doc, CDocument) END_MESSAGE_MAP() // CTag10_1Doc Erstellung/Zerstörung CTag10_1Doc::CTag10_1Doc() { // TODO: Hier Code für One-Time-Konstruktion einfügen } CTag10_1Doc::~CTag10_1Doc() { } BOOL CTag10_1Doc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: Hier Code zur Reinitialisierung einfügen // (SDI-Dokumente verwenden dieses Dokument) return TRUE; } // CTag10_1Doc Serialisierung void CTag10_1Doc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: Hier Code zum Speichern einfügen } else { // TODO: Hier Code zum Laden einfügen } } // CTag10_1Doc Diagnose #ifdef _DEBUG void CTag10_1Doc::AssertValid() const { CDocument::AssertValid(); } void CTag10_1Doc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG // CTag10_1Doc-Befehle CLine* CTag10_1Doc::AddLine(CPoint ptFrom, CPoint ptTo) { //Ein neues CLine-Object erzeugen CLine *pLine = new CLine(ptFrom, ptTo); try { //Die neue Linie in das Object-Array einfügen m_oaLines.Add(pLine); //Dokument als bearbeitet markieren SetModifiedFlag(); } //Ist speicherausnahme aufgetretten? catch(CMemoryException* perr) { //Meldung für Benutzer, schlechte //Neuigkeiten mitteilen AfxMessageBox("Speichermangel", MB_ICONSTOP | MB_OK); //Wurde Linienobject erzeugt? if(pLine) { //Object löschen delete pLine; pLine = NULL; } //Ausnahmeobject löschen perr->Delete(); } return pLine; } int CTag10_1Doc::GetLineCount() { //Größe des Arrays zurückgeben return m_oaLines.GetSize(); } CLine* CTag10_1Doc::GetLine(int nIndex) { //Zeiger auf Linienobject für die angegeben //Position in Objectarray zurückgeben return (CLine*)m_oaLines[nIndex]; }Tag10_1Doc.h
#pragma once #include "afxcoll.h" class CTag10_1Doc : public CDocument { protected: // Nur aus Serialisierung erstellen CTag10_1Doc(); DECLARE_DYNCREATE(CTag10_1Doc) // Attribute public: // Operationen public: // Überschreibungen public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); // Implementierung public: virtual ~CTag10_1Doc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generierte Funktionen für die Meldungstabellen protected: DECLARE_MESSAGE_MAP() public: CObArray m_oaLines; CLine * AddLine(CPoint ptFrom, CPoint ptTo); int GetLineCount(void); CLine * GetLine(int nIndex); };Ich bin Anfänger, wenn um C++ geht. Ich habe einige Büche schon gelesen, und mit Syntax, ich denke, ich bin auch vertraut. Alle Tutorials(fast) sind für VC++6 geschrieben, und da sind schon gewiese Unterschiede mit VS.Net.
-
Also Leute. Ich habe vergessen in 'Tag10_1.h' 'Line.h' einbinden.Entschuldigen für die Störung.
-
Physikalischer Fehler schrieb:
Benutze mal den menschlichen Zeichenweisen Debugger und kontrolliere, ob Du auch an alle entscheidenenden Stellen ein Semikolon gesetzt hast, wie sieht es mit Klammerpaaren aus...Zuweisungen statt Vergleiche, die ganzen Flüchtigkeitsfehler eben.
Ich weiß zwar jetzt nicht was du mit "Zeichenweisen Debugger" meinst (vieleicht gibt es ja in VC++ etwas wovon ich nichts weiß) aber IMHO kann man den Debugger erst verwenden wenn sich das Programm kompilieren läßt. Die von Dir angesprochen Fehler lassen sich allso damit nicht finden. Macht aber nicht da der kompiler bereits Fehler mit Zeilennummern auswirft.
-
es geht mehr um den menschlichen debugger (also Du selbst), der zeichen für zeichen den eigenen Code liest....
