Udostępnij za pomocą


Błąd kompilatora C3772

"name" : nieprawidłowa deklaracja szablonu znajomego

Uwagi

Deklarowanie znajomego specjalizacji szablonu klasy jest nieprawidłowe. Nie można zadeklarować jawnej lub częściowej specjalizacji szablonu klasy i w tej samej instrukcji zadeklarować znajomą tę specjalizację. Symbol zastępczy nazwy identyfikuje nieprawidłową deklarację.

Aby poprawić ten błąd

  • Nie deklaruj znajomego specjalizacji szablonu klasy.

  • Jeśli jest to odpowiednie dla aplikacji, zadeklaruj znajomego szablonu klasy lub zadeklaruj znajomego określonej częściowej lub jawnej specjalizacji.

Przykład

Poniższy przykład kodu kończy się niepowodzeniem, ponieważ deklaruje znajomą częściową specjalizację szablonu klasy.

// 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>;
};

Zobacz też

Szablony
Specjalizacja szablonu