我试图将一个类模板声明为另一个类模板的 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/