www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/09/24/15:01:42

From: Martin Ambuhl <mambuhl AT earthlink DOT net>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: C++ problem
Date: Thu, 24 Sep 1998 14:10:57 -0400
Organization: Nocturnal Aviation
Lines: 53
Message-ID: <360A8B31.53CF31E9@earthlink.net>
References: <6udqfn$sdk$1 AT inf6serv DOT rug DOT ac DOT be>
NNTP-Posting-Host: 1cust196.tnt12.nyc3.da.uu.net
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

Johan Verschraegen wrote:
> 
> I use gcc from djgpp to compile the following C++ program under DOS. I
> get two warnings: (1)assuming & on 'Test::PrintMode0()' and
>                   (2)assuming & on 'Test::PrintMode1()'
> There's also an error: (3)in method 'void Test::Print()'
>                           must use .* or ->* to call printer-to-member
>                           function in 'Test::PrintPtr(...)'
> When i tried to compile to program with gcc under Unix i got no errors and
> the program worked fine. Please help me with how to solve this.

Why not just do what the diagnostics suggest, as follows:

#include <stdio.h>

class Test
{
    int testint;
    void (Test::*PrintPtr) ();
     public:
     Test(int in_testint) {
        testint = in_testint;
     } 
     void SetMode(int mode) {
        if (mode == 0)
            PrintPtr = &PrintMode0;
        if (mode == 1)
            PrintPtr = &PrintMode1;
     } 
     void PrintMode0() {
        printf("mode 0: %d\n", testint);
     } 
     void PrintMode1() {
        printf("mode 1: %d\n", testint);
     } 
     void Print() {
        (this->*PrintPtr)();
     }
};

int main()
{
    Test test1(10);
    test1.SetMode(0);
    test1.Print();              // This should print 10
    return 0;
}



-- 
Martin Ambuhl (mambuhl AT earthlink DOT net)
Note: mambuhl AT tiac DOT net will soon be inactive

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019