【问题标题】:Incompatible pointer types sending User* to parameter of type UserProfile*不兼容的指针类型将 User* 发送到 UserProfile* 类型的参数
【发布时间】:2013-11-14 08:38:22
【问题描述】:

我正在使用最新的 SDK 开发 iOS 5.0+ 应用程序。

我有这两种方法。

UserPreferences 上课。

+ (User*)getUserFromUserPreferences;

ProfileViewController 上课:

- (void)showUserData:(UserProfile*)userToShow;

还有一个继承自 UserUserProfile

@interface UserProfile : User

@property (nonatomic, strong) NSNumber* isBlockedByMe;
@property (nonatomic, strong) NSNumber* isMyFriend;

@end

最后,我有这段代码,它给了我一个警告:

[self showUserData:[User getUserFromUserPreferences]];

带有消息: Incompatible pointer types sending User* to parameter of type UserProfile*.

我这样做是否正确?

[self showUserData:(UserProfile*)[User getUserFromUserPreferences]];

或者,我可能会遇到内存泄漏或任何其他问题。

【问题讨论】:

    标签: ios iphone objective-c


    【解决方案1】:

    不,这是不正确的。它可能会使警告静音,但这样做并不理想。通常,您可以将派生类对象作为参数传递给接受基类实例的函数。你正在做的是另一种方式。

    为什么这是错误的:由于你是强制类型转换基类对象到派生类,现在如果你试图访问这个对象中的派生类内存空间,它会在运行时崩溃。该对象不包含派生类部分。

    希望有帮助!

    【讨论】:

      【解决方案2】:

      你的推导是从后到前的。您不能将基类实例 (User) 传递给接受派生类实例 (UserProfile) 的方法,但可以反过来。

      如果您将方法更改为showUserData:(User *)user,那么它将同时接受UserUserProfile 实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        相关资源
        最近更新 更多