[VC++6 MFC] CArray template als parameter

davedigital

Mitglied
ich arbeite mit dem KlassenTemplate CArray. ok, nun möchte ich aber ein object dieser klasse an eine funktion übergeben, bekomme aber immer folgenden fehler:

"konvertierung von 'class CArray <class CString,class CString>' in 'class CArray <class CString,class CString>' nicht möglich"

also, wo bitte ist da der fehler? die typen sind doch beide gleich.

definition des arrays:
CArray <CString,CString> myarray;

soll ich nun die typdefinition des templates <CString,CString> auch bei dem Prototypen, und oder bei der Implementierung, und oder bei dem Aufruf der Funktion angeben..wenn ja, wie soll es aussehen?

hoffe jemand versteht mein Problem.
danke, dAVEdIGITAL
 
Hast Du wirklich die ganze Fehlermeldung gelesen? Glaube nicht!
NO COPYCONSTRUCTOR AVAILABLE erhalte ich wenn ich das Array in einer Funktion übergeben will!

Lösung: Du musst die das Objekt als Referenz übergeben, dann klappts!!!
Noch was! Es gibt bereits eine Klasse die nennt sich CStringArray! Also musst Du den Typ nicht neu definieren!

So müsste Dein Problem behoben sein:

Code:
void CTestApp::Test()
{
    CStringArray myarray;
    MeineFunktion(myarray);
}

void CTestApp::MeineFunktion(CStringArray &myArray)
{
    myArray.Add(_T("Hallo"));
}
 
Übrigens sind die STL-Container wesentlich besser und die Copy-Konstruktoren sind auch nciht als private/protected deklariert .. ;)
 
Da habe ich aber was anderes gehört!!! Diese seien weniger effizient implementiert als die der MFC!

Und nochwas: Versuche mal bei STL Listcontainer ein RemoveAt() zu machen!!! So einfach wie bei der MFC geht das mit der STL nicht!
 
Das die - übrigens proprietären - MFC Container effizienter sind glaub ich nicht. ( -> beweisen ?)

RemoveAt sagt mir nichts (und brauch es auch nicht). Wenn du das Löschen eines Elements meinst, so sehe ich kein Problem damit.

Außerdem sind die Standard C++ Library Container äußerst generisch gehalten (Stichwort: Iteratoren), so dass du z.b. die selben Algorithmen mit jedem beliebigen Container (dazu zähl übrigens auch das builtin Array) verwenden kannst.

Die MFC Container wurden vor der Standarisierung von C++ geschaffen und sind wesentlich eingeschränkter als die STL/Standard C++ Library Container.
 
Bevor wir nun darüber ins endlose diskutieren, ob die STL Container besser sind als die der MFC lass es mich so ausdrücken!

- Ist es angebracht, wenn man mit der MFC arbeitet auf STL-Container zurückzugreifen? Macht dies Sinn? Denke nein!
- Vorteil der MFC Container ist, dass diese Vorteile bieten, was STL-Container nicht aufweisen: Einfachere Handhabung, Serialisierung!

In diesem Sinne! Soll jeder das verwenden was er für besser hält!
Verwende STL nur wenn ich rein in C++ programmiere! Bei der Programmierung mit der MFC greife ich zuerst auf die Klassen der MFC zurück!
 
Die MFC-Container sind eben nicht einfacher handzuhaben und weisen, wie wir gesehen haben einige gravierende Lücken auf (ein Container mit private Copy-Constructor? -> sinnlos).

Außerdem ist die MFC sowieso "überfüllt" und kaum mehr sinnvoll brauchbar.
 
Lässt Du dann die MFC links liegen - auch bei Oberflächen? Machst Du alles mit der STL bzw. WTL?
 
Für alles was die STL kann - STL

Wenn ich graphicse Oberflächen brauche nehm ich für einfaches (und Windows) WinAPI, einfache (und XWindows) - Xlib (d.h. z.b. wenn ich nur ein Fenster für OpenGL / DirectX brauch).

Für komplexe graphische Oberflächen -> Qt.
Bis auf den proprietären Präprozessor, mit dem sie SIGNALS/SLOTS implementieren ist Qt wesentlich sauber und eleganter als die MFC (-> auch weniger Code ;))
 
Zurück