Partilhar via


Erro de compilador C2955

'identificador' : o uso de modelo de classe ou alias genérico requer modelo ou lista de argumentos genérica

Observações

Não é possível usar um modelo de classe ou um genérico de classe como um identificador sem um modelo ou uma lista de argumentos genérica.

Para obter mais informações, consulte Modelos de classe.

Examples

O exemplo a seguir gera C2955 e mostra como corrigi-lo:

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

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

C2955 também pode ocorrer ao tentar uma definição fora de linha para uma função declarada em um modelo de classe:

// 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 também pode ocorrer quando se utilizam genéricos:

// 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 e posterior: O compilador diagnostica corretamente listas de argumentos de modelo ausentes quando o modelo aparece em uma lista de parâmetros de modelo (por exemplo, como parte de um argumento de modelo padrão ou um parâmetro de modelo não-tipo). O código a seguir é compilado no Visual Studio 2015, mas produz um erro no 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;