在 C++ 中将 class 模板声明为 class 模板的友元

Declaring a class template as a friend of a class template in C++

我正在尝试将一个 class 模板声明为另一个 class 模板的友元,这样一个 class 中的私有成员可以被另一个访问。 例如我有两个 classes 如下:

A.h
template <typename T>
class A {
    private:
       T content;
}

B.h
#include "A.h"
template <typename T>
class B {
    public:
        void add(T);

    private:
        A<T>* ptr;
}

现在,我想让 class B 成为 classA 的朋友,这样我就可以访问 classA 的内容通过classB的函数添加。所以,我在 A.h:

中添加了几行
A.h
template <typename T> class B;
template <typename T> 
class A {
    friend class B<T>;
    ...

我正在使用 Visual Studio,上面的代码会给我 "unresolved external symbol..." 错误(错误代码 LNK2019)。 我尝试了其他变体,但我一直收到链接器错误。请帮帮我。谢谢。

函数 add(T) 的定义在 B.cpp 中,我没有在 post 中写。

以下代码在 gcc 上构建良好。我添加了 B<T>::add(T) 的定义,因为它丢失了。很可能是你的缺席导致了你的 link - not compilation! - error.

template<typename T>
class B;

template <typename T>
class A {
    private:
       T content;

    friend B<T>;
};

template <typename T>
class B {
    public:
        void add(T t) { A<T> a; a.content = t; }

    private:
        A<T>* ptr;
};

int main() {
    A<int> a;
    B<int> b;
    b.add(3);
}