Problem mit m_splitterwnd.CreateStatic



  • Hallo zusammen,
    ich bin in meinem schönen Buch grade an dem Kapitel "Teilbare Fenster". Wenn ich die Fenster dynamisch erstelle funktioniert dies ohne probleme. Wenn ich aber nun mit CreateStatic ein geteiltes Fenster erstellen möchte, dann bekomme ich immer drei Fehlermeldungen.
    Mein Code sieht zur Zeit so aus:

    Deklaration in der MainFrame.h

    // Attribute
    protected:
    	CSplitterWnd m_splitterwnd;
    

    MainFrame.cpp

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	m_splitterwnd.CreateStatic(this,2,1);
    	m_splitterwnd.CreateView(0,0,RUNTIME_CLASS(CTestanwendungView),CSize(100,100),pContext);
    	m_splitterwnd.CreateView(1,0,RUNTIME_CLASS(CTestanwendungView),CSize(100,100),pContext);
    	return true;
    }
    

    Die Fehlermeldungen sind folgende:

    --------------------Konfiguration: testanwendung - Win32 Debug--------------------
    Kompilierung läuft...
    MainFrm.cpp
    e:\source_codes\c++\testanwendung\testanwendungview.h(21) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'
    e:\source_codes\c++\testanwendung\testanwendungview.h(21) : error C2501: 'CTestanwendungDoc' : Fehlende Speicherklasse oder Typspezifizierer
    e:\source_codes\c++\testanwendung\testanwendungview.h(21) : error C2501: 'GetDocument' : Fehlende Speicherklasse oder Typspezifizierer
    Fehler beim Ausführen von cl.exe.

    testanwendung.exe - 3 Fehler, 0 Warnung(en)

    Und wenn ich nun auf die erste Fehlermeldung klicke springt er mir in die testanwendungView.h zu folgendem Code:

    class CTestanwendungView : public CView
    {
    protected: // Nur aus Serialisierung erzeugen
    	CTestanwendungView();
    	DECLARE_DYNCREATE(CTestanwendungView)
    
    // Attribute
    public:
    	CTestanwendungDoc* GetDocument(); // <- Hier springt er her.
    

    Hat vielleicht jemand ne idee an was dies liegen könnte, ich finde den Fehler irgendwie nicht.



  • Ich vermute, dass es an der Reihenfolge deiner includes liegt.



  • Hab die Includes mal geändert, is aber nix passiert. Kommen die gleichen Fehler
    Hier die Includes:

    // MainFrm.cpp : Implementierung der Klasse CMainFrame
    //
    #include "stdafx.h"
    #include "testanwendung.h"
    #include "MainFrm.h"
    #include "testanwendungView.h"
    


  • und wie sehen die includes in deiner testanwendungview.cpp aus?



  • #include "stdafx.h"
    #include "testanwendung.h"
    
    #include "testanwendungDoc.h"
    #include "testanwendungView.h"
    


  • Ja, da werden die includeguards zuschlagen.

    Versuch mal folgendes:

    // MainFrm.cpp : Implementierung der Klasse CMainFrame
    //
    #include "stdafx.h"
    #include "testanwendung.h"
    #include "MainFrm.h"
    #include "testanwendungDoc.h" 
    #include "testanwendungView.h"
    


  • Jetzt funktioniert.
    Ich dachte die "testanwendungDoc.h" wird über die "testanwendungView.cpp" eingebunden???
    Dort wird diese ja ebenfalls includet...
    Hast du vielleicht noch ne erklärung für mich???



  • Ja hab ich.
    Ein include ist für den Präprozessor nichts weiter als ein Befehl an diese Stelle den Inhalt der Datei zu kopieren.
    So, d.h. in der Datei MainFrame.cpp steht jetzt der Inhalt der Datei TestanwendungView.h. Dort wird die Klasse CTestanwendungDoc verwendet. Die Datei TestanwendungDoc.h wird aber nicht in MainFrame.h, nicht in MainFrame.cpp und nicht in Testanwendungsview.h eingebunden. Die Klasse CTestanwendungDoc ist also schlichtweg unbekannt.



  • @dEUs
    Stimmt, sobald ich diese in die "testanwendungView.h" einbinde geht es. Die wurde ja nur in der cpp "testanwendungView.cpp" eingebunden. So ein kleiner Fehler und so grosse wirkungen...
    Thanx...


Log in to reply