Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"identifier" : użycie szablonu klasy lub aliasu ogólnego wymaga szablonu lub ogólnej listy argumentów
Nie można użyć szablonu klasy lub klasy ogólnej jako identyfikatora bez szablonu lub ogólnej listy argumentów.
Aby uzyskać więcej informacji, zobacz Szablony klas.
Poniższy przykład generuje kod C2955 i pokazuje, jak go naprawić:
// C2955.cpp
// compile with: /c
template<class T>
class X {};
X x1; // C2955
X<int> x2; // OK - this is how to fix it.
C2955 może również wystąpić podczas próby definicji poza wierszem dla funkcji zadeklarowanej w szablonie klasy:
// 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 może również wystąpić w przypadku używania typów ogólnych:
// C2955_c.cpp
// compile with: /clr
generic <class T>
ref struct GC {
T t;
};
int main() {
GC^ g; // C2955
GC <int>^ g;
}
Przykład
Program Visual Studio 2017 lub nowszy: kompilator poprawnie diagnozuje brakujące listy argumentów szablonu, gdy szablon pojawi się na liście parametrów szablonu (na przykład jako część domyślnego argumentu szablonu lub parametr szablonu innego niż typ). Poniższy kod kompiluje się w programie Visual Studio 2015, ale generuje błąd w programie 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;