Memberfunktion deklarieren mit Rückgabewert CStringArray



  • Hallo,

    ich habe folgendes Problem. Ich füge in meiner Dokumentenklasse eine Memberfunktion die ein Rückgabewert von einem Array hat. Die Funktion ist public definíert.Und das CString Array ist private.

    CStringArray CAdrDoc::getKeys(void)
    {
    	m_posMapPos =  m_pAdressenMap.GetStartPosition();
    
    	while( m_posMapPos!= NULL ) 
    	{
    	  CAdresse* pAdr;
    	  CString string;
    	  m_pAdressenMap.GetNextAssoc( m_posMapPos, string, pAdr );
    	  m_strArray.Add(string);
    	 }
    
    	return m_strArray;
    
    }
    

    Ich bekomme folgende Fehlermeldung:

    1>c:\programme\microsoft visual studio 8\vc\atlmfc\include\afxcoll.h(593) : error C2248: "CObject::CObject": Kein Zugriff auf private Member, dessen Deklaration in der CObject-Klasse erfolgte.
    1>        c:\programme\microsoft visual studio 8\vc\atlmfc\include\afx.h(558): Siehe Deklaration von 'CObject::CObject'
    1>        c:\programme\microsoft visual studio 8\vc\atlmfc\include\afx.h(529): Siehe Deklaration von 'CObject'
    1>        Diese Diagnose trat in der vom Compiler generierten Funktion "CStringArray::CStringArray(const CStringArray &)" auf.
    

    Wieso? Was mache ich falsch? Wieso kann ich nicht auf mein CStringArray zugreifen?

    mfg
    gast



  • Hallo

    Eventuell ist ein CStringArray nicht kopierbar?

    chrische



  • Hi,

    ich möchte grundsätzlich auf das CStringArray über die Methode mittels der View Klasse mit GetDocument() zugreifen.Ich hab das jetzt mal so umgeändert, dass die Funktion ein Pointer auf das CStringarray zurückgibt. Nur irgendwie,wenn ich ein pointer auf das CStringArray zurückgebe und dann im View auf den Inhalt des Array zugreife zeigt der mir nur schmarn an.



  • Hallo

    Nutz den Debugger.

    chrische



  • Wie der Compiler dir schon meldet, versuchst du irgendwie auf private Member einer anderen Klasse zuzugreifen. Wenn du in deiner Klasse auf Member einer anderen Klasse zugreifen willst, musst du diese in der anderen Klasse eben als public deklarieren.



  • Hi

    es ergibt sich das nächste Problem . Die Funktion getKeys() rufe ich in der OnUpdate() auf.

    void CAdrView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
    {
    
    	//m_ListBox.ResetContent();
    	CStringArray& mstr=GetDocument()->getKeys();
    	TRACE("%s",mstr[0]);
    	//m_ListBox.AddString(mstr[0]);
    
    }
    

    Jedoch wenn ich das Programm ausführen will kommt eine Fehlermehldung Debug Assertion Failed. Was mache ich falsch? Mit dem Index vom CStringArray kann ich doch normalerweise auf die jeweiligen im Array gespeicherten CStrings zugreifen oder? Also das was ich ursprünglich machen wollte war, dass ich immer bei OnUpdate den Inhalt vom Array in die ListBox speichere.

    mfg


Log in to reply