Sdílet prostřednictvím


Chyba kompilátoru C2955

Identifikátor: použití šablony třídy nebo obecného aliasu vyžaduje šablonu nebo obecný seznam argumentů.

Poznámky

Šablonu třídy nebo obecný typ třídy nelze použít jako identifikátor bez šablony nebo obecného seznamu argumentů.

Další informace naleznete v tématu Šablony tříd.

Examples

Následující příklad vygeneruje C2955 a ukazuje, jak ho opravit:

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

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

K C2955 může dojít také při pokusu o mimořádkovou definici funkce deklarované v šabloně třídy:

// 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() {}

K C2955 může také dojít při použití obecných typů:

// 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 a novější: Kompilátor správně diagnostikuje chybějící seznamy argumentů šablony, když se šablona zobrazí v seznamu parametrů šablony (například jako součást výchozího argumentu šablony nebo parametru šablony bez typu). Následující kód se zkompiluje v sadě Visual Studio 2015, ale v sadě Visual Studio 2017 dojde k chybě.

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;