This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Objective-C++: passing Objective-C objects to C++ methods?


I can confirm that the test passes on Apple's version of objective-c+ +. But this is probably because Apple's objective-c++ compiler is based on 4.0 and is passing by accident. We have not hashed out overload resolution in the presence of an 'id' type, even tough the test case does not require this logic. This test may fail on Apple'c objective-c++ in some other forms where overload resolution logic is required.

- Fariborz

On Nov 11, 2006, at 9:15 PM, frederiksmith1942@mac.hush.com wrote:

I've run into some problems with Objective-C++ while using the gcc-
4.2-20061107 snapshot.

Passing a statically typed Objective-C object to a C++ function
with a parameter of type id works fine. However, I get compilation
errors when passing the same statically typed Objective-C object to
a method of a C++ class that has a parameter of type id.

I'm also getting errors when (in this case) I'm passing Objective-C
classes of type Test, but declared to be of type id, to C++ object
methods expecting an argument of type Test*.

I'm getting these errors:
  test.mm: In function 'int main(int, char**)':
  test.mm:51: error: no matching function for call to
'printer::print_Test(objc_object*&)'
  test.mm:33: note: candidates are: void printer::print_Test(Test*)
  test.mm:53: error: no matching function for call to
'printer::print_id(Test*&)'
  test.mm:37: note: candidates are: void
printer::print_id(objc_object*)

Here is the test.mm code in question:

----8<-----

#import <stdio.h>
#import <objc/Object.h>

@interface Test : Object {
  int i;
}

-(id) init:(int)n;
-(id) print;

@end


@implementation Test


-(id) init:(int)n {
  i = n;

  return self;
}

-(id) print {
  printf("%d\n", i);

  return self;
}

@end


class printer { public: void print_Test(Test* test) { [test print]; }

    void print_id(id test) {
      [test print];
    }
};

int main(int argc, char** argv) {

  Test* test_Test = [[Test alloc] init:100];
  id test_id = [[Test alloc] init:200];

printer p;

  p.print_Test(test_Test);
  p.print_Test(test_id);

  p.print_id(test_Test);
  p.print_id(test_id);

  return 0;
}

----8<-----

While I can't test it myself at the moment, this code reportedly
works fine with Apple's compiler [1][2]. Is this a bug/restriction
with GCC's implementation of Objective-C++, or is the above code
incorrect?

Frederik


References [1] http://lists.apple.com/archives/Cocoa-dev/2006/Nov/msg00544.html [2] http://lists.apple.com/archives/Cocoa-dev/2006/Nov/msg00545.html






Concerned about your privacy? Instantly send FREE secure email, no account required
http://www.hushmail.com/send?l=480


Get the best prices on SSL certificates from Hushmail
https://www.hushssl.com?l=485




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]