far pointer in Klasse?



  • Hallo

    ich möchte gerne einen far pointer als Konstruktor für eine Klasse
    definieren.
    Als globale Variable sieht es im Borland so aus:

    unsigned char far *test = (unsigned char far *)0xFFFF0000;
    

    und im Hauptprogramm wird es so angesprochen:

    *Test=0xFF;
    

    Ich würde aber gerne alles in eine Klasse packen:

    class CTest
      { public:
                 CTest (unsigned char KTest); //Konstruktor
                 unsigned char far *Test
      }; 
    //Konstruktor Deklaration:
    CTest::CTEST (unsigned char far *KTest)
    {
     unsigned char *Test = (unsigned char far *)KTest;
    }
    
    //Konstruktor:
    CTest MOD (0xFFFF0000);
    

    und im Hauptprogramm:

    *MOD.Test = 0xAA;
    

    Aber irgendwie funkt es nicht.
    Der Compiler meldet: "Test is asigned a value that is never used"

    Bitte ich weiss ich verlange zu viel aber vielleicht hatte schon jemand schon das Problem

    Danke



  • Die Konstruktordeklaration heisst natürlich so:

    //Konstruktor Deklaration:
    CTest::CTEST (unsigned char far *KTest)
    {
     unsigned char far *Test = (unsigned char far *)KTest;
    }
    


  • Das ist die einzige (Fehler)meldung, die du bekommst?
    Wenn sonst alles funzt ?
    hmh dein code kommt mir ein bisschen seltsam vor...
    kann sein, dass eine lücke von mir aber was soll ein
    unsigned char far * sein ? ein lustiger reim ?
    und
    unsigned char *Test = (unsigned char 😉 KTest
    Test ist da eine neue (lokale) Variable
    😕



  • far und near zeiger gibt es in 'alten' Betriebssystemen...

    Was du bekommst ist eine Warnung! Und schliesslich hat der Compiler ja recht: du verwendest Test dann ja nirgends.

    Warnung != Fehler



  • Nach Borland hilfe:

    far (Typ-Modifizierer)
    Erzeugt einen Zeiger im Format far und generiert Funktionscode
    für far-aufrufe

    Syntax: <Typ> far <Zeigerdefinition>

    Ich brauche ihn weil der adressbereich den ich ansprechen will 32bit hat

    ich habe auch schon das probiert:

    //Konstruktor Deklaration:
    CTest::CTEST (unsigned char far *KTest)
    {
     *Test = *KTest;
    }
    

    aber das kennt er nicht



  • Hallo,
    far hat vorallem nichts mit Standard-C++ zu tun. Ich verschiebe dich mal ins Andere Compiler Forum, auch wenn dein Problem gelöst zu sein scheint.



  • von Problem gel?st kann garnicht die Rede sein.
    Habe noch ein paar Sachen ausprobiert aber es funkt noch nicht.
    Ich schilder lieber mein Problem nochmal:
    ich habe einen far-Zeiger der auf die Speicherstelle 0xF8800000 zeigt

    unsigned char far *Zeiger = (unsigned char far*)0xF8800000;
    

    dieser Code ist i.O. wenn global definiert
    in main ver?ndere ich den INHALT von der Speicherstelle 0xF8800000 und schreibe 0x0A rein:

    *Zeiger = 0x0A;
    

    das funkt auch.

    sobald ich den far-Zeiger in einer Klasse definiere
    und in main dann

    *MOD.Zeiger = 0xAA
    

    eingebe passiert nichts



  • CTest::CTEST (unsigned char far *KTest)
    {
     unsigned char far *Test = (unsigned char far *)KTest;
    }
    

    Dieser Code ist die Ursache. Du erstellst im konstruktor eine Variable Test. Das die genauso heißt wie die variable Test der klasse stört den Compiler nicht. Diese lokale Variable Test wird aber beim verlassen des k'tors wieder zerstört. Mach einfach das unsigned char far * vor test weg, und schon klappts. 🙂


Anmelden zum Antworten