2012-04-26 37 views
14

Tôi nhận được lỗi biên dịch không tìm thấy bao gồm trong XCode. Tôi có một dự án ứng dụng iOS mà tôi sử dụng Objective-c và C++ làm mix.Bao gồm <string> không tìm thấy lỗi biên dịch trong Xcode 4.2

Ban đầu, tôi đã tạo một tệp .h và một tệp .cpp trong dự án ios của tôi. Sau đó, tôi đổi tên tệp .cpp thành tệp .mm.

Đây là tệp .h của tôi;

TestLog.h

#ifndef CalculatorDemo_TestLog_h 
#define CalculatorDemo_TestLog_h 
#include <string> 
using namespace std; 

class TestLog 
{ 
private: 
    string logString; 
public: 
    void Log(string logMessage); 
}; 


#endif 

TestLog.mm

#include "TestLog.h" 

void TestLog::Log(string logMessage) 
{ 
    //this->logString->append(logMessage); 

} 

tôi thiếu gì? Tôi có cần thêm thư viện std C++ vào targetS của tôi không? Nội dung nào đó liên quan đến Đường dẫn tiêu đề tìm kiếm?

Tôi chỉ cần sử dụng loại chuỗi.

Cảm ơn bạn đã trả trước

+0

Chắc chắn có vẻ như nó * nên * hoạt động ... Nhưng, có lý do nào bạn không sử dụng 'NSString' thay thế không? –

+0

trông giống như XCode không bao gồm các đường dẫn std theo mặc định, tôi đoán rằng bạn cần phải làm điều đó bằng tay. Cũng tránh sử dụng bằng cách sử dụng trong các tập tin .h làm điều đó trong tập tin thực hiện hoặc không sử dụng nó cả. – AlexTheo

Trả lời

4
+0

Đối với các ứng dụng cần sử dụng mã C++ (và các thư viện C++ chuẩn), đây là điều phải đọc! Khá khó để tìm câu trả lời này nhưng chết tiệt, nó đã giúp tôi nhiều hơn một lần! Cảm ơn! : D – javatarz

+1

Một số mô tả về sự cố sẽ được chào đón trong chuỗi này. – AbiusX

+1

Vui lòng trả lời câu hỏi trong câu trả lời của bạn, thay vì chỉ đăng một liên kết có thể thối vào một diễn đàn có nhiều câu trả lời (một số không sử dụng được). –

1

tôi tin rằng bạn cần đưa toàn bộ đường dẫn vào thư viện. tương tự như để nói "nền tảng" & "uiview" khuôn khổ.

#import <Foundation/Foundation.h> 

hoặc

#import <UIKit/UIKit.h> 

và có, chắc chắn rằng bạn thêm thư viện để mục tiêu của bạn.

5

chọn dự án -> xây dựng thiết lập -> táo LLVM trình biên dịch 5.1 -> Ngôn ngữ

Trong Compile Sources As thay đổi Objective-C++

2

Có một điều không minh bạch trong XCode. Tôi nhận thấy nó trong 7.3. Hầu hết các dự án đều nhận ra các tệp .mm và STL, trong khi một dự án tôi đã không có. Sửa chữa là tôi đã phải bấm vào biểu tượng dự án trên cùng bên trái, sau đó nhấp vào Targets> Build Phases> Link Binary with Libraries> và thêm vào AppKit.framework. Tiếp theo, tôi phải nhấp vào Mục tiêu> Cài đặt xây dựng> tìm kiếm trên "Nguồn biên dịch" và đặt thành "Mục tiêu C++" trên tất cả các cột có thể. Sau đó, hãy làm sạch và sau đó là một xây dựng từ trình đơn sản phẩm. Điều này được biên dịch đúng cách. Sau đó, quay trở lại Compile Sources đó một lần nữa và thiết lập nó trở lại "Theo File Type" trên tất cả các cột có thể. Sau đó, nhấp vào Xây dựng từ trình đơn Sản phẩm một lần nữa. Tại thời điểm đó, nó được biên dịch đúng và cho phép tôi sử dụng tùy chọn "theo loại tệp", mà tôi thích hơn.

Oh, và nếu làm Cocoa thứ, đừng quên để thêm tiêu đề sau đây trong tập tin của bạn:

#import <Cocoa/Cocoa.h> 

Và nếu làm dòng lệnh thứ, đừng quên để thêm thay vì sau đây của Tiêu đề ca cao:

#import <Foundation/Foundation.h> 
+0

Câu trả lời hay! Cảm ơn bạn! Tôi nghĩ rằng tôi đã mất trí ... Nâng cấp xcode của tôi từ 7 đến 8 và tất cả của một bất ngờ mã C + + của tôi đã không được công nhận ... Cảm ơn bạn! – NpC0mpl3t3

0

Vì vậy, tôi gặp vấn đề này với thư viện Cocoapods Bỏ qua và không có giải pháp nào trong số này thực hiện bất kỳ điều gì. Vấn đề là với một tập tin mà Cocoapods tạo ra được gọi là một tiêu đề ô. Địa chỉ này nằm ở số <POD_NAME>/Support Files/<POD_NAME>-umbrella.h. Xóa nó, và nó sẽ xây dựng tốt.

Bây giờ để giải thích lý do tại sao điều này là cần thiết: tiêu đề ô trộn lẫn cả mã C++ và Objective-C trực tiếp trong tiêu đề, không rõ ràng và kết thúc hoàn toàn vi phạm nhập C++. Bằng cách loại bỏ nó (mà dường như không có hiệu lực?) Này nhập khẩu mâu thuẫn mà Cocoapods vô tình tạo ra sẽ biến mất.

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