> It's not particularly tricky. +alloc returns an id, and Objective-C doesn't 
> have operand-overloaded methods.
> There is nothing in your alloc/init expression that tells the _compiler_ 
> which of the differently-defined initWithParent:
> methods you intend to use, so it picks one in some undefined way. In this 
> case, it picked the one you didn't intend.
>
> You can force the choice by casting the result of +alloc to the intended type:
>
> [ (HSMM_TrieNode *)[HSMM_TrieNode alloc] initWithParent: aNode ]

-Wstrict-selector-match would have reported the ambiguity.  Otherwise, the 
following code compiles without complaint (this is on gcc 4.0; on gcc 4.2 the 
warning flag might be on by default):

    @interface Class1 : NSObject
    - (id) initWithScalar: (int) i;
    @end

    @interface Class2 : NSObject
    - (id) initWithScalar: (float) f;
    @end

    void test (void)
    {
        Class1 *o1 = [[Class1 alloc] initWithScalar: 1];
        Class1 *o2 = [[Class1 alloc] initWithScalar: 1.0f];
        Class2 *o3 = [[Class2 alloc] initWithScalar: 1];
        Class2 *o4 = [[Class2 alloc] initWithScalar: 1.0f];
    }

However, two of these four init method invocations will get a parameter in a 
form (int vs float) they don't expect since the compiler doesn't have enough 
information to perform the expected implicit type conversion across the call, 
and that is not good.

As for the scope and interpretation of method names, this might be worth a look 
if you haven't already:

http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocSelectors.html#//apple_ref/doc/uid/TP30001163-CH23-SW1

Paul Sanders.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to