Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
söz dizimi hatası: 'tanımlayıcı' tanımlayıcısı öncesinde 'belirteç' eksik
Açıklamalar
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
};