2015-03-07 19 views
10

Tôi cố gắng để biên dịch một ứng dụng android trong android studio (ndk r10d) trong đó sử dụng một số mã C++. Tôi cần C++ 11 vì vậy tôi đã thêm -std=gnu++11 (Tôi cần gnu++11 thay vì c++11 cho tiện ích mở rộng mà tôi đang sử dụng). Tôi đang sử dụng stlport stl, do các thư viện khác tôi đang sử dụng mà sử dụng thư viện stl này. Vì vậy CFLAGS tôi và các thông số stl trong file build.gradle trông như thế này:Bắt lỗi: 'shared_ptr' trong không gian tên 'std' không tên một loại

stl "stlport_static" 
cFlags " mylib1.a mylib2.a ... -fexceptions -frtti -std=gnu++11" 

Tôi cũng bao gồm bộ nhớ: #include <memory>

Khi cố gắng để biên dịch tôi nhận được lỗi này:

'shared_ptr' in namespace 'std' does not name a type 

Tôi đã sử dụng việc thực hiện tăng cường cho các con trỏ thông minh cho đến bây giờ nhưng với việc di chuyển đến C++ 11 Tôi thà sử dụng việc thực hiện tiêu chuẩn.

+0

Mã thực sự gây ra lỗi là gì? –

+0

Các lỗi ban đầu là về vấn đề này xác định tôi thêm vào làm cho mã ngắn hơn nhưng các lỗi được nhìn thấy khắp các tập tin bất cứ nơi nào tôi cố gắng sử dụng macro này: #define myapp_shared_ptr std :: shared_ptr – royeet

+0

shared_ptr không tên một loại. Nó đặt tên một mẫu kiểu. Bạn có chắc chắn bạn đang làm shared_ptr khi bạn sử dụng? Các lỗi tôi nhận được khi tôi rời khỏi đó ra là "sử dụng mẫu lớp đòi hỏi đối số mẫu" – Charlie

Trả lời

1

@ T.C Hình như bạn đã đúng. Tôi thấy yêu cầu của bạn về một câu hỏi khác trong khi tìm kiếm giải pháp cho vấn đề của tôi, nhưng vì các thư viện mà tôi đang sử dụng đang biên dịch với C++ 11 và STLport, tôi nghĩ rằng yêu cầu này có thể không đúng.

Những gì tôi nghĩ rằng xảy ra là các thư viện Tôi đang sử dụng không sử dụng bất kỳ tính năng C++ 11 rằng STLport là mất tích. Chúng chỉ sử dụng các tính năng C++ 11 mà trình biên dịch gcc hỗ trợ. Tôi cần gnuStl để hỗ trợ các tính năng mà tôi đang sử dụng.

Giải pháp của tôi là sử dụng thực hiện thúc đẩy cho các con trỏ thông minh và tất cả các thiếu C++ 11 tính năng khác.

+0

Có, GNU STL hỗ trợ tất cả các tính năng của C++ 11. – juzzlin

11

http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared tập tin đầu sử dụng trong mã của bạn.

#include <iostream> 
#include <memory> 
+1

Điều này có cần thiết không? –

+1

Tôi đã có cùng một vấn đề này và shared_ptr không được xác định trong khi sử dụng stlport_static. Câu trả lời này là vô nghĩa. – juzzlin

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