Teilen über


Compilerfehler C2955

'Bezeichner': Die Verwendung der Klassenvorlage oder des generischen Alias erfordert eine Vorlagen- bzw. eine generische Argumentliste.

Bemerkungen

Eine Klassenvorlage oder generische Klasse kann ohne Vorlagen- bzw. generische Argumentliste nicht als Bezeichner verwendet werden.

Weitere Informationen finden Sie unter "Klassenvorlagen".

Examples

Im folgenden Beispiel wird C2955 generiert und gezeigt, wie dies behoben werden kann.

// C2955.cpp
// compile with: /c
template<class T>
class X {};

X x1;   // C2955
X<int> x2;   // OK - this is how to fix it.

C2955 kann auch bei dem Versuch auftreten, eine abweichende Definition für eine Funktion zu erstellen, die in einer Klassenvorlage deklariert wurde:

// 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 kann auch auftreten, wenn Generics verwendet werden:

// 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 und höher: Der Compiler diagnostiziert ordnungsgemäß fehlende Vorlagenargumentlisten, wenn die Vorlage in einer Vorlagenparameterliste angezeigt wird (z. B. als Teil eines Standardvorlagenarguments oder eines Vorlagenparameters ohne Typ). Der folgende Code kompiliert in Visual Studio 2015, aber erzeugt in Visual Studio 2017 einen Fehler.

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;