Kompilatorfel C3772

"name" : ogiltig deklaration av vänmall

Anmärkningar

Det är ogiltigt att deklarera en vänfunktion till specialisering av en klassmall. Man kan inte deklarera en explicit eller partiell specialisering av en klassmall och samtidigt deklarera en vän till den specialiseringen i samma deklaration. Namnplatshållaren identifierar den ogiltiga deklarationen.

Så här åtgärdar du det här felet

  • Deklarera inte en vän till en klassmallsspecialisering.

  • Om det är lämpligt för ditt program, deklarerar du en vän till klassmallen eller deklarerar en vän till en viss partiell eller explicit specialisering.

Example

Följande kodexempel misslyckas eftersom det deklarerar en vän till en partiell specialisering av en klassmall.

// c3772.cpp
// compile with: /c

// A class template.
    template<class T> class A {};

// A partial specialization of the class template.
    template<class T> class A<T*> {};

// An explicit specialization.
    template<> class A<char>;

class X {
// Invalid declaration of a friend of a partial specialization.
    template<class T> friend class A<T*>; // C3772

// Instead, if it is appropriate for your application, declare a
// friend of the class template. Consequently, all specializations
// of the class template are friends:
//    template<class T> friend class A;
// Or declare a friend of a particular partial specialization:
//    friend class A<int*>;
// Or declare a friend of a particular explicit specialization:
//    friend class A<char>;
};

Se även

Templates
Mallspecialisering