2012-02-12 44 views
8

Tôi gặp rắc rối khi kết hợp C++ và mục tiêu-c với nhau trong việc phát triển một ứng dụng iphone. Tôi đã có một thư viện bên thứ 3 để sử dụng trong ứng dụng. Tôi đã có kế hoạch sử dụng c hoặc C++ để bọc thư viện và sau đó sử dụng mục tiêu-c để gọi nó. Sau khi tôi đã hoàn thành lớp với C++, tôi đã gặp rắc rối khi sử dụng nó trong mục tiêu-c. Có mã mẫu nào không? Cảm ơn.Làm thế nào để sử dụng C++ và target-c cùng nhau trong XCode 4.2

trong tệp đầu mục tiêu c. Tôi viết

#import <UIKit/UIKit.h> 
#import "ZJTConstants.h" 
#include "TTSAdapter.h" 

class Adapter; 
@interface ZJTVBlogViewController : UIViewController { 
@private 
    Adapter* adapter; 
} 
@end 

và trong file mm, tôi viết:

if (self) { 
    adapter = Adapter::getInstance(); 
    // Custom initialization 
} 

Is it viết?

+0

Sự cố gì ...? –

+0

Có vẻ như bạn đang thực sự sử dụng tệp '.mm', vậy, vấn đề là gì? bạn đã không nói cho chúng tôi biết bạn đang gặp phải vấn đề gì. – Krizz

+0

Nó nói rằng có một số lỗi biên dịch, vì vậy tôi đã tự hỏi nếu có bất cứ điều gì sai trong cú pháp. – seanxiaoxiao

Trả lời

5

Gọi mã C++ từ mã mục tiêu-C liên quan đến việc kết thúc tệp của bạn với .mm (thay vì .m) để trình biên dịch Objective-C++ sẽ được sử dụng.

Trình biên dịch này có thể hiểu cả C++ và Objective-C.

Nói cách khác, trình biên dịch ObjC++ cho phép bạn đặt mã C++ trực tiếp trong các phương pháp Mục tiêu-C và ngược lại.

Hãy xem Cocoa_With_Carbon_or_CPP exampleStrategies for Using C++ in Objective-C Projects (and vice versa) bài viết.

6

Chỉ cần đổi tên tệp của bạn để có phần mở rộng .mm thay vì .m.

Để kết hợp mã C++ với mã Objective-C, bạn sẽ cần trình biên dịch Objective-C++. XCode theo mặc định biên dịch .m tệp với trình biên dịch Objective-C và .mm với mục tiêu-C++ một.

8

Trong XCode có một lá cờ để biên dịch tất cả các tệp dưới dạng Mục tiêu-C++. Tôi đã sử dụng nó để biên dịch các thư viện C++ lớn thành các chương trình iOS.

Nếu bạn nhìn vào "Cài đặt xây dựng", có một địa điểm được viết là "Biên dịch nguồn thành". Có một trình đơn thả xuống ở đó bạn có thể chọn Objective-C++. Trong dòng lệnh clang/gcc, tôi nghĩ nó là "-x objective-C++".

+1

Kích thước không quan trọng Những gì bạn phải làm chỉ là thay đổi phần mở rộng thành .mm của lớp có chứa mã C++ ... –

+3

@HikmatKhan Điều tôi gợi ý đôi khi đổi tên tệp, đặc biệt là trong các dự án lớn (nhiều người) không thực sự là một lựa chọn. –

+0

Lá cờ đó được gọi là gì ?! – kevlar

Các vấn đề liên quan