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...! 😃


  • Mod

    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?


Log in to reply