2012-06-22 39 views
6

Sau khi làm theo các bước trong this post Tôi đã quản lý để làm cho Eclipse (Indigo) nhận diện unique_ptr (và các công cụ mới khác của C++ 11). Vấn đề là operator-> cho unique_ptr dường như không được hỗ trợ trong Eclipse. Ở đây bạn có một ví dụ:Toán tử dereference cho unique_ptr không hoạt động trong Eclipse

class Foo { void bar() { /* ... */ } }; 

std::unique_ptr<Foo> foo; 
(*foo).bar(); // 1 
foo->bar(); // 2 

Trường hợp 1 hoạt động như mong đợi: không có lỗi và tự động hoàn thành. Tuy nhiên, đối với trường hợp 2, Eclipse đánh dấu câu lệnh bằng một lỗi ("Phương thức 'thanh' không thể được giải quyết"), cộng với tự động hoàn thành từ foo-> không hoạt động.

Thú vị nhất, tôi không gặp bất kỳ sự cố nào với std::shared_ptr. Nó chỉ xảy ra cho std::unique_ptr.

Có ai gặp phải sự cố tương tự không? Có ai biết cách sửa chữa nó không?

CHỈNH SỬA: chỉ nhằm mục đích làm rõ, quá trình biên dịch diễn ra tốt đẹp cho đoạn mã được hiển thị ở trên. Vì vậy, vấn đề không có trong trình biên dịch, nhưng trên Eclipse.

+0

@dirk: câu hỏi là về tự động hoàn thành và chọn lint tĩnh trong IDE; không đề cập đến các vấn đề biên dịch. – Rook

+0

@dirkgently Tôi đang sử dụng g ++ 4.6, do đó việc biên dịch sẽ ổn. Vấn đề chỉ ảnh hưởng đến Eclipse. – betabandido

+0

@Rock: Phải. Tôi đã bỏ lỡ một chút. – dirkgently

Trả lời

0

Cuối cùng tôi đã tìm thấy một số bug report trong CDT mô tả cùng một vấn đề mà tôi đang gặp phải. Cho đến nay, không có một sửa chữa thực sự cho vấn đề này nhưng có một cách giải quyết khác được giải thích trong đó báo cáo lỗi:

Vâng, GCC 4.5 là phiên bản mới nhất GCC có thư viện tiêu đề có thể được chính xác lập chỉ mục của CDT. Lý do chính để không lập chỉ mục 4.6 tiêu đề là thiếu CD2 hỗ trợ cho 'constexpr' và 'nullptr', được sử dụng rộng rãi trong tiêu đề 4.6 (bất kỳ cơ hội nào được triển khai cho Juno, bằng cách này?).

Tôi đã giải quyết vấn đề này bằng cách cài đặt cả GCC 4.5 và 4.6 trên hệ thống và trỏ CDT đến 4.5 tiêu đề (bằng cách đặt lệnh gọi trình biên dịch lệnh 'g ++ - 4.5' trong Discovery Options) biên dịch với 4.6.

0

Sự cố này gần đây đã được khắc phục, trong cdt 8.1.1. Chỉ cần truy cập trợ giúp-> kiểm tra các bản cập nhật và nó sẽ được tải xuống và cài đặt. Tôi đã thử nghiệm unique_ptr và nó được lập chỉ mục đúng cách.

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