我试图将一个类模板声明为另一个类模板的 friend ,以便一个类中的私有(private)成员可以被另一个类访问。
例如,我有两个类,如下所示:

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

现在,我想让B 类成为A 类的 friend ,这样我就可以通过B 类的函数add访问A 类的内容。因此,我在A.h中添加了几行:
A.h
template <typename T> class B;
template <typename T>
class A {
    friend class B<T>;
    ...

我正在使用Visual Studio,并且上面的代码将给我“无法解析的外部符号...”错误(错误代码LNK2019)。
我尝试了其他变体,但始终收到链接器错误。请帮帮我。谢谢。

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

最佳答案

以下代码可在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);
}

关于c++ - 在C++中将类模板声明为类模板的 friend ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39793186/

10-10 02:18