Error C4430, in MFC Test anwendung!
-
Guten Morgen,
ich bekomme 3 Fehler und 1 Warning in meiner MFC Test Anwendung!
Fehler 1: error C2143: Syntaxfehler: Es fehlt ';' vor '*' d:\c\projects\mfctest13okt\mfctest13okt\mfctest13oktview.h 18 MFCTest13Okt Fehler 2: error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. d:\c\projects\mfctest13okt\mfctest13okt\mfctest13oktview.h 18 MFCTest13Okt Fehler 3: error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. d:\c\projects\mfctest13okt\mfctest13okt\mfctest13oktview.h 18 MFCTest13Okt Warnung 4: warning C4183: 'GetDocument': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen d:\c\projects\mfctest13okt\mfctest13okt\mfctest13oktview.h 18 MFCTest13Okt
TESTView.h
// MFCTest13OktView.h : Schnittstelle der Klasse CMFCTest13OktView // #pragma once class CTestDialog1; class CTestDialog2; class CTestDialog3; class CMFCTest13OktView : public CView { protected: // Nur aus Serialisierung erstellen CMFCTest13OktView(); DECLARE_DYNCREATE(CMFCTest13OktView) // Attribute public: CMFCTest13OktDoc* GetDocument() const; private: CTestDialog1* ptestdlg; CTestDialog2* ptestdlg2; CTestDialog3* ptestdlg3; public: CTestDialog1* GetDlgP(); // Vorgänge public: // Überschreibungen public: virtual void OnDraw(CDC* pDC); // Überschrieben, um diese Ansicht darzustellen virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: // Implementierung public: virtual ~CMFCTest13OktView(); #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: afx_msg void OnViewDia1(); }; #ifndef _DEBUG // Debugversion in MFCTest13OktView.cpp inline CMFCTest13OktDoc* CMFCTest13OktView::GetDocument() const { return reinterpret_cast<CMFCTest13OktDoc*>(m_pDocument); } #endif
Kann mir jm. sagen wie ich diese Fehler behebe?
mfg
-
Scheinbar ist der Typ CMFCTest13OktDoc nicht bekannt. Mach ihn bekannt!
-
Ah ich hatte vergessen die .cpp zu posten!!
// MFCTest13OktView.cpp : Implementierung der Klasse CMFCTest13OktView // #include "stdafx.h" #include "MFCTest13Okt.h" #include "MFCTest13OktDoc.h" #include "MFCTest13OktView.h" #include "TestDialog1.h" #include "TestDialog2.h" #include "TestDialog3.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMFCTest13OktView IMPLEMENT_DYNCREATE(CMFCTest13OktView, CView) BEGIN_MESSAGE_MAP(CMFCTest13OktView, CView) ON_COMMAND(ID_VIEW_DIA1, &CMFCTest13OktView::OnViewDia1) END_MESSAGE_MAP() // CMFCTest13OktView-Erstellung/Zerstörung CMFCTest13OktView::CMFCTest13OktView() { // TODO: Hier Code zur Konstruktion einfügen ptestdlg = NULL; ptestdlg2 = NULL; ptestdlg3 = NULL; } CMFCTest13OktView::~CMFCTest13OktView() { delete ptestdlg; delete ptestdlg2; delete ptestdlg3; } BOOL CMFCTest13OktView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie // CREATESTRUCT cs modifizieren. return CView::PreCreateWindow(cs); } // CMFCTest13OktView-Zeichnung void CMFCTest13OktView::OnDraw(CDC* /*pDC*/) { CMFCTest13OktDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: Code zum Zeichnen der systemeigenen Daten hinzufügen } // CMFCTest13OktView-Diagnose #ifdef _DEBUG void CMFCTest13OktView::AssertValid() const { CView::AssertValid(); } void CMFCTest13OktView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CMFCTest13OktDoc* CMFCTest13OktView::GetDocument() const // Nicht-Debugversion ist inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCTest13OktDoc))); return (CMFCTest13OktDoc*)m_pDocument; } #endif //_DEBUG // CMFCTest13OktView-Meldungshandler void CMFCTest13OktView::OnViewDia1() { ptestdlg = new CTestDialog1(this); ptestdlg ->Create(CTestDialog1::IDD,this); ptestdlg ->ShowWindow(SW_SHOW); ptestdlg2 = new CTestDialog2(this); ptestdlg2 ->Create(CTestDialog2::IDD,this); ptestdlg2 ->ShowWindow(SW_SHOW); ptestdlg3 = new CTestDialog3(this); ptestdlg3 ->Create(CTestDialog3::IDD,this); ptestdlg3 ->ShowWindow(SW_SHOW); } CTestDialog1* CMFCTest13OktView::GetDlgP() { return ptestdlg; }
Dort wird ja die Doc includiert...!
-
Ja und?
Wenn Du aber irgendwo den View Header alleine includest, dann hast Du ein Problem...
-
Dort wo der View Header includiert wird wird auchd er rest includiert!
Dialog3.cpp
// TestDialog3.cpp: Implementierungsdatei // #include "stdafx.h" #include "MFCTest13Okt.h" #include "MFCTest13OktView.h" #include "MFCTest13OktDoc.h" #include "TestDialog3.h" // CTestDialog3-Dialogfeld IMPLEMENT_DYNAMIC(CTestDialog3, CDialog) CTestDialog3::CTestDialog3(CWnd* pParent /*=NULL*/) : CDialog(CTestDialog3::IDD, pParent) { } CTestDialog3::~CTestDialog3() { } void CTestDialog3::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CTestDialog3, CDialog) ON_BN_CLICKED(IDOK, &CTestDialog3::OnBnClickedOk) ON_BN_CLICKED(ID_TITLE_CHANGE, &CTestDialog3::OnBnClickedTitleChange) END_MESSAGE_MAP() // CTestDialog3-Meldungshandler void CTestDialog3::OnBnClickedOk() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. } void CTestDialog3::OnBnClickedTitleChange() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. //ptestdlg->SetTitle("BLALBLALBLBLALBL"); CTestDialog1* ptestdlg; //ptestdlg = CMFCTest13OktView::GetDlg(); ptestdlg = m_pTestView->GetDlgP(); }
Dialog3.h
#pragma once // CTestDialog3-Dialogfeld class CTestDialog1; class CMFCTest13OktView; class CTestDialog3 : public CDialog { DECLARE_DYNAMIC(CTestDialog3) private: //CTestDialog1* ptestdlg; public: CTestDialog3(CWnd* pParent = NULL); // Standardkonstruktor virtual ~CTestDialog3(); // Dialogfelddaten enum { IDD = IDD_DIALOG3 }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung DECLARE_MESSAGE_MAP() public: CMFCTest13OktView *m_pTestView; public: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedTitleChange(); };
-
So hab den Fehler gefunden!
class CMFCTest13OktDoc;
Aber bekomm ich jetzt doch die Fehlermeldung!
"Unbehandelte Ausnahme bei 0x00413cf6 in MFCTest13Okt.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdce25."
-
Darin zeigt er mir auf
TestViw.cpp
CTestDialog1* CMFCTest13OktView::GetDlgP() { return ptestdlg; }
Die in TestDialog3.cpp aufgerufen wird
void CTestDialog3::OnBnClickedTitleChange() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. //ptestdlg->SetTitle("BLALBLALBLBLALBL"); CTestDialog1* ptestdlg; //ptestdlg = CMFCTest13OktView::GetDlg(); ptestdlg = m_pTestView->GetDlgP(); }
-
Erstelle dein Projekt als Debug-Version, dann hüpft er bei dem Fehler in den betreffenden Teil, und du kannst dir Variableninhalte und den Callstack ansehen usw. Mit dem Debuggen mit Release-Version machst du dir das Leben unnötig schwer.
-
Danke für den hinweis, doch arbeite ich schon mit der Debug-Version! In der release verson würde ja nicht einmal der Fehler angezeigt werden!
Mfg
-
Hm, ok, und worauf zeigt m_pTestView? Auf ein gültiges Objekt?