larry@wizard.dsg.tandem.com (Larry Wear) (04/13/90)
The following program works correctly using AT&T's cfront 1.2,
however it does not work correctly using Sun's cfront 2.0.  The
NullIt method in the class go does not modify the pointer value
of name.  I would like to know why.  Thanks.         
#include <malloc.h>
#include <stream.h>
#define NULL 0
typedef void* ANY;
class bigFun
{
 public:
  void NullIt( ANY & pObject )
    {
      pObject = NULL;
    }
};
void main()
{
  bigFun go;
  char * name  = malloc(5);
  go.NullIt( (ANY)name );
  if ( name == NULL ) cout << "Success\n";
  else cout << "Failed\n";
}
--
Larry Wear                wizard!larry@Tandem.COM
Tandem Computersc60c-2ca@e260-2d.berkeley.edu (Andrew Choi) (04/14/90)
In article <1208@wizard.dsg.tandem.com> larry@wizard.dsg.tandem.com (Larry Wear) writes: >The following program works correctly using AT&T's cfront 1.2, >however it does not work correctly using Sun's cfront 2.0. The >NullIt method in the class go does not modify the pointer value >of name. I would like to know why. Thanks. > >#include <malloc.h> >#include <stream.h> > >#define NULL 0 >typedef void* ANY; > >class bigFun >{ > public: > > void NullIt( ANY & pObject ) > { > pObject = NULL; > } >}; > >void main() >{ > bigFun go; > char * name = malloc(5); > > go.NullIt( (ANY)name ); > if ( name == NULL ) cout << "Success\n"; > else cout << "Failed\n"; >} > >-- >Larry Wear wizard!larry@Tandem.COM >Tandem Computers The reason is that a temporary variable will be created if the type of reference variable does not match exactly the type of its assigned value or if the assigned value is a literal. The cast really does not affect anything because it merely informs the compiler which conversion is to be used. ---------- Andrew Choi Internet Address: c60c-2ca Standard Disclaimer