Ben http://code.google.com/p/enhsim kod aşağıdaki satırı derlemek istiyorum: beyan etmezBir nesne bir referansa dönüştürülemez mi?
error: no match for 'operator<<' in 'enh::eout << enh::setw(26)'
Ama (enh::eout
bir örnek olduğu) EnhSimOutput
sınıfını:
enh::eout << enh::setw(26);
gcc aşağıdaki hatayı veriyor
EnhSimOutput& operator<< (setw& p);
Bu sorunu gideren işlemin bir sürümünü uygularsam, bu sorun giderilir. o değere göre itiraz:
enh::setw wValue(26);
enh::eout << wValue;
Sorum şudur: neden gcc ait "by-referans" versiyonunu seçmez
EnhSimOutput& operator<< (setw p);
yoksa, yani yerel olarak enh::setw
nesne oluşturmak durumunda operatör ile başlayacak?
Bu kodu yazan geliştiriciler, onu derlemeyi açıkça yaptı, ancak varsayılan olarak gcc bunu yapmayı reddediyor. Yerel değişken olarak ayrı olarak bildirilen bir nesne ile yerel olarak oluşturulan bir satır içi arasında neden bir fark var?
Operatörün bir const referansına değiştirilmesi sorunu hassas bir şekilde düzeltir. Rvalues hakkında bilgi için teşekkürler. Kodun neden başka biri için derlenmiş olduğunu bilmiyorum. Proje Windows için tasarlandı ... belki hepsi bir * öksürük * komplikasyonsuz derleyici kullanıyor. Fikrim yok. –
litb: "Cümleninizde" referans-to-const "kastettiğinizi düşünüyorum." Ayrıca, eğer buna katılırsanız, parametre üzerinde const olmayan üye fonksiyonlarını çağırmış olamaz, çünkü bu bir non-cons-to-consconst. " –
Matt: MS Visual C++ 'nin eski sürümleri, geçici olmayanları const olmayan yapısına hatalı olarak bağlar. Bu MSVC++ 2005'te düzeltildiğini düşünüyorum. –