sách gpt4 ăn đã đi

Lỗi "Dự kiến ​​một loại" trỏ đến kiểu trả về của phương thức

In lại Tác giả: IT Lão Cao Thời gian cập nhật: 28-10-2023 11:40:45 25 4
mua khóa gpt4 giày nike

Tôi cố gắng biên dịch, nhưng mỗi lần tôi biên dịch, một trong các phương thức lại đưa ra lỗi "Loại dự kiến" kỳ lạ. Tôi có một phương pháp trong tiêu đề:

-(ANObject *)generateSomethingForSomethingElse:(NSString *)somethingElse;

Lỗi chỉ ra kiểu trả về của phương thức này. tôi đã sử dụng #nhập "ANObject.h" Sẽ Đối tượng Nhập vào tiêu đề và Đối tượng Biên soạn tốt ..

Tại sao điều này lại xảy ra?

câu trả lời hay nhất

Điều này liên quan đến thứ tự biên dịch các tệp nguồn. Có thể bạn đã biết rằng bạn không thể gọi một phương thức trước khi nó được xác định (xem mã giả bên dưới):

giá trị var = someMethod();

hàm someMethod()
{
...
}

Điều này sẽ gây ra lỗi thời gian biên dịch vì someMethod() chưa được xác định. Các lớp học cũng vậy. Các lớp được biên dịch lần lượt bởi trình biên dịch.

Vì vậy, nếu bạn tưởng tượng việc đặt tất cả các lớp của mình vào một tệp lớn trước khi biên dịch, bạn có thể đã thấy vấn đề. chúng ta hãy xem Tàu thủyBến thuyền loại:

@interface BoatYard: NSObject
@property (không nguyên tử, giữ lại) Ship* currentShip;
@kết thúc

@interface Gửi : NSObject
@property (không phải nguyên tử, giữ nguyên) NSString* tên;
@property (không phải nguyên tử, gán) trọng số float;
@kết thúc

Một lần nữa, bởi vì Tàu thủy Lớp chưa được xác định, chúng tôi chưa thể tham chiếu nó. Việc khắc phục sự cố cụ thể này rất đơn giản; thay đổi thứ tự biên dịch và biên dịch. Tôi chắc chắn bạn đã quen với màn hình này trong XCode:

Nhưng bạn có biết bạn có thể kéo file lên và xuống danh sách không? Điều này thay đổi thứ tự các tập tin được biên dịch. Vì vậy, chỉ cần thay đổi Tàu thủy lớp chuyển đến Bến thuyền Ở trên lớp, mọi thứ đều ổn.

Nhưng nếu bạn không muốn làm điều này, hoặc quan trọng hơn, nếu có mối quan hệ tuần hoàn giữa hai đối tượng thì sao? Hãy làm điều này bằng cách thêm cặp Tàu thủy vị trí hiện tại Bến thuyền tham chiếu để tăng độ phức tạp của biểu đồ đối tượng:

@interface BoatYard: NSObject
@property (không nguyên tử, giữ lại) Ship* currentShip;
@kết thúc

@interface Gửi : NSObject
@property (không nguyên tử, giữ nguyên) BoatYard* currentBoatYard;
@property (không phải nguyên tử, giữ nguyên) NSString* tên;
@property (không phải nguyên tử, gán) trọng số float;
@kết thúc

Ôi chúa ơi, bây giờ chúng ta có một vấn đề. Hai cái này không thể được biên dịch cạnh nhau. Chúng ta cần một cách để thông báo cho trình biên dịch rằng lớp Ship* thực sự tồn tại. đây là @lớp học Lý do tại sao từ khóa rất thuận tiện.

Theo cách nói thông thường, bạn đang nói: “Hãy tin tôi,Tàu thủy Nó tồn tại và bạn sẽ sớm thấy nó." Tóm lại:

@lớp Tàu;

@interface BoatYard: NSObject
@property (không nguyên tử, giữ lại) Ship* currentShip;
@kết thúc

@interface Gửi : NSObject
@property (không nguyên tử, giữ nguyên) BoatYard* currentBoatYard;
@property (không phải nguyên tử, giữ nguyên) NSString* tên;
@property (không phải nguyên tử, gán) trọng số float;
@kết thúc

Trình biên dịch hiện đang biên dịch Bến thuyền biết khi nàoTàu thủy Định nghĩa lớp sẽ sớm xuất hiện. Tất nhiên, nếu không thì việc biên dịch vẫn thành công.

@lớp học Tất cả những gì từ khóa làm là thông báo cho trình biên dịch rằng lớp đó sẽ sớm xuất hiện. NóKHÔNG #nhập khẩu các lựa chọn thay thế. Bạn vẫn phải nhập tệp tiêu đề, nếu không bạn sẽ không thể truy cập bất kỳ nội dung nào của lớp:

@lớp Tàu

-(void) ví dụ
{
Ship* newShip = [[Phân bổ tàu] khởi tạo];
}

Điều này không hoạt động và không thành công với thông báo lỗi cho biết Ship là một tuyên bố chuyển tiếp. một khi bạn#import "Ship.h", bạn có thể tạo một thể hiện của đối tượng.

Về Objective-C - lỗi "Dự kiến ​​một loại" trỏ đến kiểu trả về của phương thức, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8105688/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress