Verwendung einer eigenen Klasse mit Parameter als Member in der Dokumentenklasse



  • Ich möchte in meiner Dokumentenklasse eine weitere Klasse als Member verwenden. Der Konstruktor dieser Klasse erwartet einen CString als Parameter. Wenn ich jetzt in der Headerdatei meiner Dokumentenklasse die Membervariable definiere, so akzeptiert der Kompiler nur den Standardkonstruktor, also ohne den String. Wie kann man das realisieren?

    //eigene Klasse
    CMyClass::CMyClass(CString Bezeichner)
    {...}
    
    //Dokumentenklasse
    #pragma once
    #include MyClass.h
    
    class CTestDoc : public CDocument
    {
    protected: // Nur aus Serialisierung erstellen
    	CTestDoc();
    	DECLARE_DYNCREATE(CTestDoc)
    
    // Attribute
    public:
    
    CMyClass m_myClass(_T("blabla"));  //geht nicht
    
    ...}
    

    Muss ich jetzt eine Variable mit dem Standardkonstruktor anlegen und dann im Konstruktor der Doc-Klasse eine Instanz mit dem String erzeugen, um diese dann der Variablen zu übergeben?



  • AndyDD schrieb:

    Wenn ich jetzt in der Headerdatei meiner Dokumentenklasse die Membervariable definiere, so akzeptiert der Kompiler nur den Standardkonstruktor, also ohne den String.

    An dieser Stelle wird überhaupt kein Konstruktor "akzeptiert". Die Initialisierung der Member passiert in den Initialisierungslisten der Konstruktoren der enthaltenden Klasse, also hier in CTestDoc::CTestDoc.



  • Ich habs jetzt so gemacht und es funktioniert:

    //eigene Klasse
    CMyClass::CMyClass(CString Bezeichner)
    {...}
    
    //Dokumentenklasse Header
    #pragma once
    #include MyClass.h
    
    class CTestDoc : public CDocument
    {
    protected: // Nur aus Serialisierung erstellen
    	CTestDoc();
    	DECLARE_DYNCREATE(CTestDoc)
    
    // Attribute
    public:
    
    CMyClass m_myClass;
    
    ...}
    
    //Dokumentenklasse Quelldatei
    
    CTestDoc::CTestDoc
    : my_Class(_T("bla"))
    {}
    

    War mir so nicht bewusst. Bei mir hatte sich manifestiert, dass bei jeder Instanzbildung der Konstruktor aufgerufen wird. Naja, und die Instanz wird ja, wie du schon sagst, erst im Doc erzeugt. Manchmal sieht man den Wald vor lauter Bäumen nicht. Aber vielen Dank für den Tipp..... 👍


Anmelden zum Antworten