2012-01-17 19 views
8

std :: unique_ptr'yi beklediğim gibi derleyen ve çalıştıran bu kod parçasında kullanıyorum. Ancak, Eclipse CDT'den hata iletileri alıyorum. Dördüncü satırda: 'insert' yöntemi çözümlenemedi, Method 'end' çözülemedi.Eclipse CDT dizini ve std :: unique_ptr

Önceden, std :: unique_ptr isminin görünüşlerinde de hatalar görüyordum. Bu işlem __GXX_EXPERIMENTAL_CXX0X__ ön işlemci sembolünü ayarlayarak ve this sorusunun cevabında açıklandığı gibi endeksi yeniden oluşturarak çözüldü.

CDT'nin std :: string * türünde olduğunu ve std :: string'in s-> insert() ve s-> end() için görünmesi gerektiğini anlamanın bir yolu var mı?

Not: Eclipse 3.7.1 ve SÇT kullanıyorum 8.0.0.201106081058

PS2: Ben yukarıdaki soruya bir yorum olarak bu post isterdi, ama yapamam ben değilim muhtemelen çünkü new user

cevap

4

Eclipse CDT dizinleyici, operatörün dönüş türü olarak da kullanılan unique_ptr :: pointer türünü çıkaramaz gibi görünüyor ->(). Eğer bir hata eşleşen aşırı yük olacağını ve tek aday reset(?) olacağını "tespit" edilecektir

std::unique_ptr<Type *> ptr; 
ptr.reset(new Type); 

gibi bir şey yazarken bu görebilirsiniz. Yani bu açıkçası bir böcek.

2

Bu sorun, son zamanlarda 8.1.1'de giderilmiştir. Sadece yardım edin -> güncellemeleri kontrol edin ve indirilecek ve yüklenecek. Unique_ptr'yi test ettim ve düzgün bir şekilde dizine eklendim.

+1

Ben CDT 8.1.2 çalışıyor teyit edebiliriz – Nobody

1

Aynı konunun Eclipse CDT'nin (9.3) daha yeni sürümünde de var. İnternette bulduğum tüm hileleri denedim, indeksimi her defasında yeniden inşa ettim, bir değişim umuduyla. Ancak, indeksleyici hiçbir zaman std::unique_ptr<T>::operator->() türünü çıkaramadı. Eclipse (bina değil, sadece indeksleme seçenekleri için elbette)

# ifdef ECLIPSE_INDEXER_WORKAROUND 
MyType* my_var; 
# else 
std::unique_ptr<MyType> my_var; 
# endif  

Ben önişlemci sembollerine ECLIPSE_INDEXER_WORKAROUND ekleyin ve indeksleme yine yararlı olacaktır: Son olarak, ben çok basit bir çözüm kullanmaya karar verdi!

, biz bir makro kullanabilirsiniz az kod kirleten bulunmak için:

# ifdef ECLIPSE_INDEXER_WORKAROUND 
# define MY_UNIQUE_PTR(type) type* 
# else 
# define MY_UNIQUE_PTR(type) std::unique_ptr<type> 
# endif 

MY_UNIQUE_PTR(int) pint{ new int(42) }; 
İlgili konular