2010-05-27 42 views
89

Tôi rất thất vọng ngay bây giờ sau vài giờ cố gắng tìm vị trí shared_ptr. Không có ví dụ nào tôi thấy hiển thị mã hoàn chỉnh để bao gồm các tiêu đề cho shared_ptr (và hoạt động). Chỉ cần nêu rõ std, tr1<memory> không giúp gì cả! Tôi đã tải về tăng và tất cả nhưng nó vẫn không hiển thị! Ai đó có thể giúp tôi bằng cách nói chính xác nơi để tìm thấy nó?Được chia sẻ ở đâu?

Cảm ơn bạn đã để tôi trút sự thất vọng của mình!

EDIT: Tôi thấy tiêu đề của mình đã bị thay đổi. Xin lỗi vì điều đó. Vì vậy, nó cũng là bởi vì nó không rõ ràng với tôi rằng shared_ptr là "C++ phụ thuộc phiên bản" -> đó là lý do tại sao tôi đã không nhà nước môi trường của tôi -> do đó có lẽ tại sao nó đã rất khó khăn cho tôi để tìm thấy nó.

Tôi đang làm việc trên MSVS2008.

EDIT 2: Tôi không biết tại sao, nhưng tôi đã bao gồm [nhớ] và [tăng/tr1/memory.hpp] và [tăng/tr1/tr1/bộ nhớ] trong khi tìm kiếm khắp mọi nơi cho shared_ptr .. tất nhiên, tôi không thể.

Cảm ơn tất cả các câu trả lời.

+3

có thể sẽ hữu ích nếu bạn có thể thiết lập chính xác, như trình biên dịch và tăng đường dẫn phiên bản/cài đặt – YeenFei

+7

Trừ khi bạn ở trên C++ 0x, 'shared_ptr' không một phần của tiêu chuẩn. Nó rất phổ biến mặc dù một số sẽ coi nó là tiêu chuẩn mặc dù nó không được nêu ra. –

+4

Bạn nghĩ chúng ta nên trả lời câu hỏi này như thế nào mà không biết liệu môi trường của bạn có phải là GCC cho chip máy rửa chén 7,5bit, trình biên dịch độc quyền của máy tính lớn 128bit hay phiên bản GCC của XCode không? – sbi

Trả lời

153

Có ít nhất ba nơi mà bạn có thể tìm thấy shared_ptr:

  1. Nếu triển khai C++ của bạn hỗ trợ C++ 11 (hoặc ít nhất là C++ 11 shared_ptr), sau đó std::shared_ptr sẽ được xác định trong <memory>.

  2. Nếu C++ thực hiện hỗ trợ các phần mở rộng thư viện C++ TR1, sau đó std::tr1::shared_ptr sẽ có khả năng được <memory> (Microsoft Visual C++) hoặc <tr1/memory> (g ++ 's libstdC++). Boost cũng cung cấp một thực thi TR1 mà bạn có thể sử dụng.

  3. Nếu không, bạn có thể lấy thư viện Boost và sử dụng boost::shared_ptr, có thể được tìm thấy trong <boost/shared_ptr.hpp>.

+3

Đối với VS 2008, bạn có nhận được "gói tính năng" hay bạn đã cài đặt SP1 không? Nếu vậy thì phần 2 ở đây áp dụng cho bạn, sử dụng không gian tên 'tr1'. –

+0

Cảm ơn. Điều này hoạt động như ma thuật. Tôi không biết tại sao, nhưng tôi đã bao gồm trong khi tìm kiếm ở khắp mọi nơi cho shared_ptr .. tất nhiên, tôi không thể. Cảm ơn một lần nữa. – Jake

+0

Sau khi thoát khỏi C++ một thời gian ngắn, tôi đã rất ngạc nhiên khi thấy rằng (trong clang v3.1) 'shared_ptr' vẫn đang ngồi trong một không gian tên' tr1'. Bất kỳ suy nghĩ về điều này? – hiwaylon

6

cho VS2008 với bản cập nhật gói tính năng, shared_ptr có thể được tìm thấy dưới namespace std :: tr1.

std::tr1::shared_ptr<int> MyIntSmartPtr = new int; 

của

nếu bạn có tăng đường dẫn cài đặt (ví dụ @C:\Program Files\Boost\boost_1_40_0) thêm vào các thiết lập IDE của bạn:

#include <boost/shared_ptr.hpp> 
4

Nếu your'e tìm bor boost 's shared_ptr, bạn có thể có dễ dàng tìm thấy câu trả lời bằng cách googling shared_ptr, theo các liên kết đến các tài liệu, và kéo lên một ví dụ làm việc hoàn chỉnh như this.

Trong mọi trường hợp, đây là một hoàn toàn tối giản ví dụ làm việc cho bạn mà tôi chỉ bị hack lên:

#include <boost/shared_ptr.hpp> 

struct MyGizmo 
{ 
    int n_; 
}; 

int main() 
{ 
    boost::shared_ptr<MyGizmo> p(new MyGizmo); 
    return 0; 
} 

Để cho #include để tìm các tiêu đề, các thư viện rõ ràng cần phải được trong con đường tìm kiếm . Trong MSVC, bạn thiết lập điều này trong Cài đặt dự án> Thuộc tính cấu hình> C/C++> Thư mục bổ sung bao gồm. Trong trường hợp của tôi, thiết lập này được đặt thành C:\Program Files (x86)\boost\boost_1_42

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