Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"identifierare" : användning av klassmall eller alias generisk kräver mall eller allmän argumentlista
Anmärkningar
Du kan inte använda en klassmall eller klass som generisk som identifierare utan en mall eller en allmän argumentlista.
Mer information finns i Klassmallar.
Examples
Följande exempel genererar C2955 och visar hur du åtgärdar det:
// C2955.cpp
// compile with: /c
template<class T>
class X {};
X x1; // C2955
X<int> x2; // OK - this is how to fix it.
C2955 kan också inträffa vid försök till en out-of-line-definition för en funktion som deklareras i en klassmall:
// C2955_b.cpp
// compile with: /c
template <class T>
class CT {
public:
void CTFunc();
void CTFunc2();
};
void CT::CTFunc() {} // C2955
// OK - this is how to fix it
template <class T>
void CT<T>::CTFunc2() {}
C2955 kan också inträffa när du använder generiska läkemedel:
// C2955_c.cpp
// compile with: /clr
generic <class T>
ref struct GC {
T t;
};
int main() {
GC^ g; // C2955
GC <int>^ g;
}
Visual Studio 2017 och senare: Kompilatorn diagnostiserar korrekt saknade mallargumentlistor när mallen visas i en mallparameterlista (till exempel som en del av ett standardmallargument eller en mallparameter som inte är av typen). Följande kod kompileras i Visual Studio 2015 men genererar ett fel i Visual Studio 2017.
template <class T> class ListNode;
template <class T> using ListNodeMember = ListNode<T> T::*;
template <class T, ListNodeMember M> class ListHead; // C2955: 'ListNodeMember': use of alias
// template requires template argument list
// correct: template <class T, ListNodeMember<T> M> class ListHead;