CArray als Rückgabewert

gamerfunkie

Erfahrenes Mitglied
Hallo,
ich habe eine Funktion, die ein CArray<CString,CString> zurückgeben soll:
Code:
CArray<CString,CString> ClusterServer::getRecvData()
{
    return m_recvData;
}
Wenn ich das nun kompiliere, erhalte ich folgenden Fehler:
Code:
1>c:\programme\programmieren\microsoft visual studio 8\vc\atlmfc\include\afxtempl.h(272) : error C2248: "CObject::CObject": Kein Zugriff auf private Member, dessen Deklaration in der CObject-Klasse erfolgte.
1>        c:\programme\programmieren\microsoft visual studio 8\vc\atlmfc\include\afx.h(558): Siehe Deklaration von 'CObject::CObject'
1>        c:\programme\programmieren\microsoft visual studio 8\vc\atlmfc\include\afx.h(529): Siehe Deklaration von 'CObject'
1>        Diese Diagnose trat in der vom Compiler generierten Funktion "CArray<TYPE,ARG_TYPE>::CArray(const CArray<TYPE,ARG_TYPE> &)" auf.
1>        with
1>        [
1>            TYPE=CString,
1>            ARG_TYPE=CString
1>        ]

Kann man ein CArray nicht zurückgeben oder nur einen pointer davon?
Danke für eure Hilfe
gamerufunkie
 

pschilling

Erfahrenes Mitglied
Hi,

schreibe deine Funktion lieber so um, dass sie eine Referenz auf ein CArray entgegennimmt.

Dieses kannst du dann innerhalb der Funktion so verwenden, als wenn du es innerhalb dieser Funktion erstellt hast.

Code:
BOOL MyClass::MyFunc(CArray &arr) {

    arr.Add(...);

    return TRUE;
}

Mit dieser Art solltest du keine probleme haben!

Wenn du unbedingt ein CArray als Rückgabewert haben willst, dann gib ebenfalls eine Referenz darauf zurück :

Code:
CArray<CString,CString> &ClusterServer::getRecvData()
{
    return m_recvData;
}

Solltest du aber net mit Objekten machen, die du innerhalb einer Methode deklarierst!

Viel Erfolg,

Peter
Viel Erfolg,

Peter
 

MCoder

Erfahrenes Mitglied
Kann man ein CArray nicht zurückgeben oder nur einen pointer davon?
gamerfunkie
CArray hat keinen öffentlicher Kopierkonstruktor, daher funktioniert deine Methodenimplementierung nicht. Überhaupt finde ich die Containerklassen der MFC nicht so besonders. Mit einem vector aus der STL könntest du das nämlich so realisieren:
C++:
#pragma once
#include <vector>

class ClusterServer
{
    public:
        ClusterServer();
        ~ClusterServer();
        
        std::vector<CString> getRecvData()
        {
            return m_recvData;
        }
        
    private:
        std::vector<CString> m_recvData;
};
Gruß
MCoder