Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
'id': het gebruik van klassesjabloon of alias generic vereist sjabloon of algemene lijst met argumenten
Opmerkingen
U kunt een klassesjabloon of klasse algemeen niet gebruiken als id zonder sjabloon of algemene argumentenlijst.
Zie Klassesjablonen voor meer informatie.
Voorbeelden
In het volgende voorbeeld wordt C2955 gegenereerd en ziet u hoe u dit kunt oplossen:
// 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 ook optreden bij het uitvoeren van een out-of-line definitie voor een functie die is gedeclareerd in een klassesjabloon:
// 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 ook optreden bij het gebruik van generics:
// 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 en hoger: De compiler stelt ontbrekende sjabloonargumentenlijsten correct vast wanneer de sjabloon wordt weergegeven in een sjabloonparameterlijst (bijvoorbeeld als onderdeel van een standaardsjabloonargument of een sjabloonparameter die niet van het type is). De volgende code compileert in Visual Studio 2015, maar produceert een fout in 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;