Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » eigene Klassen in Mfc

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
18.11.2003, 10:28 Uhr
~Luke1410
Gast


Also dann direkt beim Konstruktor mit übergeben.... hm... werd mal versuchen, ob ich damit klar komme...
Auf jeden Fall schonmal danke für deine Hilfe... hätte mir wohl noch tagelang daran die Zähne ausgebissen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
18.11.2003, 16:20 Uhr
~Luke1410
Gast


Bin leider nicht viel weiter gekommen...

Test_001.h:

C++:
#pragma once
#include "basetest.h"
#include "DAoC-DoCDlg.h"

class CTest_AutoReboot : protected BaseTest<bool>{
public:
    CTest_AutoReboot(CDAoCDoCDlg *pInstance):BaseTest(pInstance){}; //hier kommen die Fehler
    ~CTest_AutoReboot(void){};
private:
    void Save(bool);
    void Set(bool);
    bool Test(void);    // 0 = Automatischer Neustart ist aus, 1 = an
};



BaseTest.h:

C++:
template<class Temp> class BaseTest : protected MD5{
public:
    inline void Adjust(Temp);
    inline void Fix(void);
    inline void Check(void);
protected:
    BaseTest(CDAoCDoCDlg *pInstance){
        bTest = TRUE;
        pInst = pInstance;
    };
    ~BaseTest(void){};

    CDAoCDoCDlg *pInst;
    bool bTest;
private:
    inline bool HasChanged(void);
    virtual void Save(Temp) = 0;
    virtual void Set(Temp) = 0;
    virtual Temp Test(void) = 0;

    Temp tOldSetting;
    Temp tCurSetting;
};



Beim Instanziieren von Test_AutoReboot soll also ein Zeiger auf den Dialog übergeben werden, der dann verwendet wird.
Test_AutoReboot soll dann wiederum diesen Parameter an das Template "weitergeben", wo es in einer Membervariable gespeichert wird.

Fehlermeldungen:

Code:
c:\Documents and Settings\Kenju\Mes documents\Projets Visual Studio\DAoC-DoC\Test_001.h(7) : error C2955: 'BaseTest': l'utilisation d'un modèle de classe nécessite une liste d'arguments de modèle
        c:\Documents and Settings\Kenju\Mes documents\Projets Visual Studio\DAoC-DoC\BaseTest.h(31): voir la déclaration de 'BaseTest'
c:\Documents and Settings\Kenju\Mes documents\Projets Visual Studio\DAoC-DoC\Test_001.h(7) : error C2512: 'BaseTest<Temp>': aucun constructeur par défaut approprié disponible
        with
        [
            Temp=bool
        ]
c:\Documents and Settings\Kenju\Mes documents\Projets Visual Studio\DAoC-DoC\Test_001.h(7) : error C2614: 'CTest_AutoReboot': initialisation de membre non conforme: 'BaseTest' n'est ni une base ni un membre


Dieser Post wurde am 18.11.2003 um 16:28 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
18.11.2003, 16:34 Uhr
Tommix




C++:
CTest_AutoReboot(CDAoCDoCDlg *pInstance):BaseTest<bool>(pInstance){};


Das <bool> fehlt. Wie bist Du nur an ein Visual Studio mit französischen Fehlermeldungen gekommen???

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
18.11.2003, 17:56 Uhr
~Luke1410
Gast


Thx mal wieder.
Leider hängt er jetzt an dieser Stelle:


C++:
#pragma once

#include "daoc-docdlg.h"
#include "md5.h"

template<class Temp> class BaseTest : protected MD5{
public:
    inline void Adjust(Temp);
    inline void Fix(void);
    inline void Check(void);
protected:
    inline BaseTest(CDAoCDoCDlg*);  // FEHLER
    ~BaseTest(void){};

    CDAoCDoCDlg *pInst;
    bool bTest;
private:
    inline bool HasChanged(void);

    virtual void Save(Temp) = 0;
    virtual void Set(Temp) = 0;
    virtual Temp Test(void) = 0;

    Temp tOldSetting;
    Temp tCurSetting;    
};
[...]



Fehler:

Zitat:

cDocuments and Settings\Kenju\Mes documents\Projets Visual Studio\DAoC-DoC\BaseTest.h(14) : error C2629: 'BaseTest<Temp> (' inattendu
cDocuments and Settings\Kenju\Mes documents\Projets Visual Studio\DAoC-DoC\BaseTest.h(28): voir la référence à l'instanciation du modèle de classe 'BaseTest<Temp>' en cours de compilation
cDocuments and Settings\Kenju\Mes documents\Projets Visual Studio\DAoC-DoC\BaseTest.h(14) : error C2238: jetons inattendus avant ';'



Muss mich mit dem französischen Compiler abblagen, da ich gerade mein Praxissemester in Frankreich mache und hier wohl kein englischer Compiler vorhanden ist...
Mitlerweile versteh ich die Fehlermeldungen sogar... aber helfen tut mir das leider auch nicht viel... Dazu kommt, dass hier fast keiner etwas mit Programmieren und C++ zu tun hat, so dass ich eigentlich vollkommen auf mich gestellt bin. Außer die Bücher zu wälzen, im INet zu suchen und Foren abzuklappern, ist das Posten somit das einzige, was mich davor bewart, Tagelang an einem Punkt festzuhängen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
19.11.2003, 08:52 Uhr
Tommix



Kann ich nicht nachvollziehen. Folgender gebastelter Test compiliert:

C++:

class CDAoCDoCDlg
{
};

class MD5
{
};

template<class Temp> class BaseTest : protected MD5{
public:
    inline void Adjust(Temp);
    inline void Fix(void);
    inline void Check(void);
protected:
    inline BaseTest(CDAoCDoCDlg*) {}  // FEHLER
    ~BaseTest(void){};

    CDAoCDoCDlg *pInst;
    bool bTest;
private:
    inline bool HasChanged(void) {return false}

    virtual void Save(Temp) {}
    virtual void Set(Temp) {}
    virtual Temp Test(void) {return tOldSetting;}

    Temp tOldSetting;
    Temp tCurSetting;    
};

class test1: protected BaseTest<bool>
{
public:
    test1() : BaseTest<bool>(new CDAoCDoCDlg) {}
    ~test1() {}
};

int main()
{
    test1 t;
    return 0;
}


Eventuell sthet in einem von den eingebundenen Header noch ein

C++:
#include "BaseTest.h"


drin?

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
19.11.2003, 10:49 Uhr
~Luke1410
Gast


Ich habe es wohl wirklich mit "rekursiven Headeraufrufen"...

Test_001.h:

C++:
#pragma once
#include "basetest.h"
#include "DAoC-DoCDlg.h"
[...]



bastest.h:

C++:
#pragma once
#include "daoc-docdlg.h"
#include "md5.h"



daoc-docdlg.h:

C++:
#pragma once
#include "afxdlgs.h"
#include "afxwin.h"
#include "resource.h"
#include "test_001.h"



Wenn ich das richtig verstanden, ist das Problem, dass in daoc-docdlg.h die test_001.h eingebunden ist, in der test_001.h und baseTest.h jedoch die daoc-docdlg.h.
Wenn das der Knackpunkt ist, wie kann ich dann überhaupt einen Zeiger übergeben?

CDAoCDoCDlg ist in der daoc-docdlg.h deklariert. Diese muss ich ja dann zwangsweise in den beiden anderen Headern einbinden, sonst wäre ja CDAoCDoCDlg nicht bekannt.
Und test_001.h muss ich ja in daoc-docdlg.h einbinden, da ich sonst kein Objekt der Test_AutoReboot-Klasse instantiieren kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
19.11.2003, 15:30 Uhr
Tommix



Zeiger einbinden geht per Vorwärts-Deklaration:

C++:
class CDAoCDoCDlg;

template<class Temp> class BaseTest : protected MD5{
...


Dieser Post wurde am 19.11.2003 um 15:30 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
19.11.2003, 17:42 Uhr
~Luke1410
Gast


Das war's.
Endlich klappts... zumindest bis zum Instantiieren des Objekts... das geht leider nicht, so wie ich mir es vorgestellt habe, werde das aber morgen versuchen selbst hinzubiegen...

Danke dir nochmal Tommix.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: