bazı Windows eski kodu taşıma ve ben tam anlamıyorum şu sorun koştu gcc/clang derlemek için bunu elde etmek için çalışırken:sözdizimi bulmaca
template<typename T> class Base
{
public:
Base() {}
T m_var;
};
template<typename T> class Derived : public Base<T>
{
public:
Derived()
{
#if 1
Base<T>::m_var = 0; // fix - compiles with gcc/clang now
#else
m_var = 0; // original - compiles only with MSVC++
#endif
}
};
gcc/clang gelen hatadır:
error: use of undeclared identifier 'm_var'
Maalesef vasıfsız eleman değişkenler türetilmiş sınıf yöntemlerinde başvurulan yerlerde yüzlerce vardır ve ben gerçekten, böylece tüm bu değiştirmek zorunda kalmak istemiyoruzile nitelikliyardım edebilirsem.
MSVC++ bunu yaparken neden gcc/clang'ın buna ihtiyaç duyduğunu açıklayabilir ve olası geçici çözümler önerebilir mi?
Özlü açıklama için teşekkürler - muhtemelen MSVC++ bunu şikayet olmadan derlemek yanlış mıdır? –
@PaulR büyük olasılıkla, evet. Birkaç yıl önce, g ++ 'nun bu tür bir koddan şikayet etmediğini ve kuralı uygulamaya koymaya başladığında benzer kodları düzeltmem gerektiğini hatırlıyorum. – anderas
@PaulR Evet, iki fazlı arama eksikliği nedeniyle. Üye sadece örnekleme zamanında aranır ve şablon tanımı AFAIK kontrol edildiğinde dikkate alınmaz. – TartanLlama