Derleyici Hatası C2146
söz dizimi hatası: 'tanımlayıcı' tanımlayıcısı öncesinde 'belirteç' eksik
Bunun yerine derleyici bekleniyor token
ve bulundu identifier
. Olası nedenler:
Yazım veya büyük harfe çevirme hatası.
Tanımlayıcının bildiriminde eksik tür tanımlayıcısı.
Bu hataya tipografik bir hata neden olabilir. C2065 hatası genellikle bu hatadan önce olur.
Örnekler
Aşağıdaki örnek C2146 oluşturur.
// C2146.cpp
class CDeclaredClass {};
class CMyClass {
CUndeclared m_myClass; // C2146
CDeclaredClass m_myClass2; // OK
};
int main() {
int x;
int t x; // C2146 : missing semicolon before 'x'
}
Bu hata, Visual Studio .NET 2003 için yapılan derleyici uyumluluğu çalışmasının sonucu olarak da oluşturulabilir: eksik typename
anahtar sözcük.
Aşağıdaki örnek Visual Studio .NET 2002'de derlenir ancak Visual Studio .NET 2003'te başarısız olur:
// C2146b.cpp
// compile with: /c
template <typename T>
struct X {
struct Y {
int i;
};
Y memFunc();
};
template <typename T>
X<T>::Y func() { } // C2146
// OK
template <typename T>
typename X<T>::Y func() { }
Visual Studio .NET 2003 için yapılan derleyici uyumluluğu çalışmasının sonucu olarak da bu hatayı görürsünüz: açık özelleştirmeler artık birincil şablondan şablon parametrelerini bulamaz.
Açık özelleştirmede birincil şablondan kullanımına T
izin verilmez. Kodun Visual Studio .NET 2003 ve Visual Studio .NET'te geçerli olması için, uzmanlık alanındaki şablon parametresinin tüm örneklerini açıkça özelleştirilmiş türle değiştirin.
Aşağıdaki örnek Visual Studio .NET'te derlenir ancak Visual Studio .NET 2003'te başarısız olur:
// C2146_c.cpp
// compile with: /c
template <class T>
struct S;
template <>
struct S<int> {
T m_t; // C2146
int m_t2; // OK
};
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin