Hilfe C2512: 'CTabBasisPage': Kein geeigneter Standardkonstruktor verfügbar



  • ich habe ein Dialog erstellt in dem ich ein Tab Control eingefügt habe.
    Doch da die Seitenanzahl zur Laufzeit bekannt wird. Hab ich jetzt eine Klasse namens tabBasisPage abgeleite von CPropertySheet erstellt in ihr sind 2 Variablen von den jeweiligen typ von dialog welches auf der seite angezeigt werden soll. Da ich auch erst zur Laufzeit weis welcher dieser Dialoge auf welcher Seite angezeigt werden soll kann ich sie nicht beide in den konstruktor Packen.
    nun sollte das Auswählen des Dialoges die Klasse von Tab Control übernehmen und hab die Beiden Konstruktoren (wieso die Klasse 2 Konstruktoren hat weis ich auch nicht!) von der CPropertySheet leer gelassen.
    Aber Irgendwie Klappt das alles nicht! 😡

    CMyTabCtrl.H
    
    #if !defined(AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_)
    #define AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // MyTabCtrl.h : header file
    //
    #include "TabBasisPage.h"
    /////////////////////////////////////////////////////////////////////////////
    // CMyTabCtrl window
    
    class CMyTabCtrl : public CTabCtrl
    {
    // Construction
    public:
    	CMyTabCtrl();
    
    	int m_tabCurrent;
    	int m_nNumberOfPages;
    	CTabBasisPage* m_tabPages;
    
    // Attributes
    public:
    
    // Operations
    public:
    	void Init(int KnGroesse,int *PinNr,CString *StBez);
    	void SetRectangle();
    
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CMyTabCtrl)
    	//}}AFX_VIRTUAL
    
    // Implementation
    public:
    	virtual ~CMyTabCtrl();
    
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CMyTabCtrl)
    	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    	//}}AFX_MSG
    
    	DECLARE_MESSAGE_MAP()
    
    };
    
    /////////////////////////////////////////////////////////////////////////////
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_)
    
    CMyTabCtrl.cpp
    
    #include "stdafx.h"
    #include "KabelstPrüf.h"
    #include "MyTabCtrl.h"
    
    #include "TabPageA.h"
    #include "TabPageB.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CMyTabCtrl
    
    CMyTabCtrl::CMyTabCtrl()
    : m_tabPages(NULL)
    {
    }
    
    CMyTabCtrl::~CMyTabCtrl()
    {
    	for(int nCount=0; nCount < m_nNumberOfPages; nCount++){
    		delete m_tabPages[nCount];
    	}
    }
    
    void CMyTabCtrl::Init(int KnGroesse,int *PinNr,CString *StBez)
    {
    	m_nNumberOfPages=KnGroesse;
    //Erstellung der Seiten von Tab Control
    	m_tabPages=new CTabBasisPage[KnGroesse]; 
    
    	m_tabCurrent=0;
    	for(int i=0;i<KnGroesse;i++)
    	{
    //Auswahl welches Dialog auf der Seite Angezeigt wird
    		InsertItem(i,"Anschl.",i);
    		if(i=0)
    		{
    			m_tabPages[i].m_SeiteA.m_pnPinNr=PinNr;
    			m_tabPages[i].m_SeiteA.m_pszStBez=StBez;
    			m_tabPages[i].m_SeiteA.Create(IDD_PROPPAGE_A, this);
    			m_tabPages[i].m_SeiteA.ShowWindow(SW_SHOW);
    			m_tabPages[i].ShowWindow(SW_SHOW);
    		}
    		else
    		{
    			m_tabPages[i].m_SeiteB.m_pnPinNr=PinNr;
    			m_tabPages[i].m_SeiteB.m_pszStBez=StBez;
    			m_tabPages[i].m_SeiteB.Create(IDD_PROPPAGE_B, this);
    			m_tabPages[i].m_SeiteB.ShowWindow(SW_SHOW);
    			m_tabPages[i].ShowWindow(SW_HIDE);
    		}
    	}
    	SetRectangle();
    }
    
    void CMyTabCtrl::SetRectangle()
    {
    	CRect tabRect, itemRect;
    	int nX, nY, nXc, nYc;
    
    	GetClientRect(&tabRect);
    	GetItemRect(0, &itemRect);
    
    	nX=itemRect.left;
    	nY=itemRect.bottom+1;
    	nXc=tabRect.right-itemRect.left-1;
    	nYc=tabRect.bottom-nY-1;
    
    	m_tabPages[0].m_SeiteA.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
    	for(int nCount=1; nCount < m_nNumberOfPages; nCount++){
    		m_tabPages[nCount].m_SeiteB.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
    	}
    }
    
    BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
    	//{{AFX_MSG_MAP(CMyTabCtrl)
    	ON_WM_LBUTTONDOWN()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CMyTabCtrl message handlers
    
    void CMyTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    	CTabCtrl::OnLButtonDown(nFlags, point);
    
    	if(m_tabCurrent != GetCurFocus()){
    		m_tabPages[m_tabCurrent].ShowWindow(SW_HIDE);
    		m_tabCurrent=GetCurFocus();
    		if(m_tabCurrent!=0)
    		{
    		m_tabPages[m_tabCurrent].m_SeiteB.m_nKnPos=m_tabCurrent;
    		}
    		m_tabPages[m_tabCurrent].ShowWindow(SW_SHOW);
    		m_tabPages[m_tabCurrent].SetFocus();
    	}
    }
    

    Danke im vorraus
    MfC bzw. MfG
    Twist



  • Hallo,

    du erstellst hier:

    m_tabPages=new CTabBasisPage[KnGroesse];
    

    ein Array von CTabBasisPage's, das geht aber nur, wenn die Klasse CTabBasisPage einen Standard-Konstruktor hat (also einen, der auch ohne Argumente aufgerufen werden kann)

    MfG


Anmelden zum Antworten